آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره تغییرات بعد از خروج از برنامه

gadolf  8 سال پیش  8 سال پیش
+2 0

این برنامه شامل تعداد زیادی از linearLayout ه و من فقط دوتاشو این جا نشون دادم. من دو تا عکس قلب تو پوشه drawable دارم. یکی خاکستری و یکی قرمز. میخوام وقتی کاربر قلب رو انتخاب میکنه و قرمز میشه یا بالعکس، این تغییرات حتی در صورت خروج از برنامه هم ذخیره بمونه. من در اینجا از listView استفاده نکردم و به همین خاطر برای هر قلب، یک ID جداگانه تعریف کردم.

0 0
من هم دقیقا همچین سوالی دارم. ممنون میشم اگه کسی جواب بده. کلا پروسه ذخیره سازی اطلاعات تو برنامه با چه دستوراتی انجام میشه ؟ (8 سال پیش)
+1 0
من الان دارم درس 01-17 آموزش ها رو نگاه میکنم. به نظر تو این درس توضیح داده شده. جواب گرفتم، میگم. (8 سال پیش)
+1 0
اگر ذخیره داده و اطلاعات بعد از خروج از برنامه رو میخواهید از SharedPrefernces استفاده کنید که در آموزش های استاد هم موجوده، اگر میخواهید علاقه مندی ها بسازید از دیتابیس استفاده کنید خیلی بهتره ! (8 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
gadolf  8 سال پیش
0 0

من میخوام تو متد پایین از SharedPrefernces استفاده کنم ولی هنوز نتونستم.  SharedPrefernces  تو کدوم قسمت از آموزش ها تدریس شده؟ با استفاده از علاقه مندی ها میتونم از همین عکس های قلب استفاده کنم؟

+2 0
تو بخش 17 استاد کامل درموردش توضیح دادن، برای علاقه مندی ها یا همون قلب که میگی از دیتابیس استفاده کن، درضمن مشکل شما اینه که بعد از اینکه چند بخش ابتدایی آموزش هارو دیدی میخوای سریع یه کتاب بنویسی که از غافله عقب نمونی، نخیر برادر من این روش اصلا برات صحیح نیست اول کامل آموزش هارو ببین بعد اقدام به ساخت برنامه بنما ! (8 سال پیش)
+1 0
این لینک همین مشکل من رو مطرح کرده که مثل اینکه درست کار کنه. من سه ماهه همین طوری دارم آموزش ها رو میبینم و پیشرفت نمیکنم. گفتم یه هدف رو شروع کنم و موردی به آموزش ها نگاه کنم، نمیخوام یه کتاب بسازم البته از جنبه هایی شبیه به کتاب هست. باز ممنونم از راهنمایی تون. (8 سال پیش)
0 0
منم وقتی آموزش ها رو نگاه میکنم و میرم جلو، حس میکنم هیچی یاد نمیگیرم، انگار دارم فیلم سینمایی میبینم. ولی وقتی برای ساخت یک برنامه تقلا می کنم و انواع کدها رو امتحان میکنم و تلاش میکنم، میتونم خیلی بهتر یاد بگیرم. (8 سال پیش)
پاسخ به سوال 
میرحسین  8 سال پیش
+2 0

کلاس AppPrefrances برای ذخیره و گرفتن اطلاعات ذخیره شده

 public class AppPrefrances {
    protected static AppPrefrances INSTANCE;
    private static SharedPreferences prefs;
    public static AppPrefrances getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = new AppPrefrances();
            prefs = PreferenceManager.getDefaultSharedPreferences(context);
        }
        return INSTANCE;
    }
    public void setClicked(String a,String b) {
        prefs.edit().putString(a, b).commit();
    }

    public String getClicked(String a) {
        // 0 is the default value
        return prefs.getString(a, "0");
    }
}

حالا در برنامه برای استفاده به صورت زیر عمل می نماییم

 public void heart(int heartId,final String save){
    final ImageView heart = (ImageView) findViewById (heartId);
if (AppPrefrances.getInstance(getApplicationContext()).getClicked(save).equals("1")){ heart.setImageResource(R.drawable.heart_fill);
} else { heart.setImageResource(R.drawable.heart_empty);
}
heart.setOnClickListener(new View.onClickListener(){ @Override public void onClick(View V){ if (AppPrefrances.getInstance(getApplicationContext()).getClicked(save).equals("1")){ heart.setImageResource(R.drawable.heart_empty);
AppPrefrances.getInstance(getApplicationContext()).setClicked(save,"0"); } else { heart.setImageResource(R.drawable.heart_fill);
AppPrefrances.getInstance(getApplicationContext()).setClicked(save,"1"); }
}
});
}

 موفق باشید.

پاسخ به سوال 
gadolf  8 سال پیش
0 0

واقعاً از لطفت ممنونم که با توجه به کدهای من پاسخ دادید، ولی کد شما دو تا ایراد داره که برنامه اجرا نمیشه:

در کلاس AppPrefrances این خطا رو نشون میده:

و متدهای قابل استفاده این متدها هستند:

 

و اما در متد heart با توجه به متدی که در کلاس AppPrefrances تعریف شده باید هر دو مقدار String باشند. اعداد 0 و 1 رو تبدیل به String کنم؟

یک نکته دیگه اینکه چرا فقط از "LateralView" استفاده شده؟ هر چند درست کار نمیکنه چون شما اشراف کامل به برنامه من ندارید باز یه سرنخی به من دادید و واقعاً ممنونم.

+1 0
خواهش میکنم دوست من راستی برای اولی ()apply از نسخه 9 به بعد استفاده میشود که شما جایگزینش از ()commit استفاده نمایید و در مورد دومین ایراد من یاد رفته بود داخل کوتیشن اعداد رو قرار دهم و مشکل آن هم اصلاح شد ممنونم از اینکه گفتید (8 سال پیش)
+1 0
چون من فقط اطلاعات مربوط به LateralView این را میخواستم نحوه ی ذخیرش رو به شما نشان دهم چنانچه میخواهید چیز دیگری هم بکار ببرید کافیست به جای یک پارامتر ورودی دو پارامتر در متود heart بگیرید و دومین پارامتر رو از نوع String قرار داده و به جای "LateralView" نام متغیر گرفته شده رو قرار دهید (8 سال پیش)
0 0
ممنون، این دستورات نیازی به ساخت فایل xml برای ذخیره داده ها نداره؟ منظورم اینه خودش تو یه فایلی ذخیره میکنه؟ من تازه بحث Prefrances ها رو شروع کردم و از کم و کیف کار اطلاع کافی ندارم. (8 سال پیش)
+1 0
بله نیازی ندارد به فایل xml و خودش ذخیره میکند و فقط در هنگامی که Clear Data برنامه زده شود پاک میشود (8 سال پیش)
0 0
LateralView هم برام سوال بود. یه بار این کار رو کردم و نتونستم جواب بگیرم. ولی خب من بلد نیستم. (8 سال پیش)
0 0
AppPrefrances باید از نوع Prefrances باشه، درسته؟ (8 سال پیش)
0 0
AppPrefrances باید از نوع Prefrances باشه، درسته؟ (8 سال پیش)
0 0
یا همین متدی که نوشتید رو تو کلاس بدون چیز اضافی کپی کنم؟ (8 سال پیش)
0 0
الآن با این روشی که گفتم امتحان کنید اگر مشکلتان رفع نشد مطرح نمایید (8 سال پیش)
0 0
من در یک کلاس مجزا بکارش بردم (8 سال پیش)
+1 0
AppPrefrances یک اسمی هست برای کلاسم شما هر اسم دیگری هم میتونید براش بذارید و نوع چیزی نیست من فقط در هرجا که بخوام صداش میکنم و کارم رو انجام میدم (8 سال پیش)
0 0
View.onClickListener در مال من مشکل داره، من به جاش onClickListener نوشتم. یه مورد دیگه هم heart.setImageResources که من heart.setImageResource نوشتم. (8 سال پیش)
+1 0
مورد اولی به خاطر تفاوت eclipse و android studio میباشد بابت دوم هم ممنون (8 سال پیش)
0 0
عالیه، درست کار میکنه. فقط یه چیز میخوام که عالی بشه. شما برنامه رو طوری نوشتید که وقتی رو TextView کلیک بشه مقدارش رو بخونه و بررسی کنه. TextView بخش اعظم مساحت linearLayout رو پوشانده. الان درست و عالی کار میکنه، فقط میخوام بدونم من برای هر linearLayout یک ID تعریف کنم میتونم با ID بررسی کنم؟ (8 سال پیش)
0 0
برای تشکر یه 10 20 بار تأیید زدم برات. دو روز تمام الّاف این بودم. ممنون. (8 سال پیش)
0 0
ممنونم دوست من فقط منظورت رو از id نفهمیدم شما میتونید به جای id از نام برای ذخیره سازی استفاده کنید تا بعدا متوجه بشید که این کد مثلا LateralView رو ذخیره میکنه و نشان میده با وارد کردن دو پارامتر در متود heart (8 سال پیش)
0 0
منظورم از ID اینه که برای هر linearLayout ی که دارم Assign ID یا Edit ID رو انتخاب کنم تا با این وسیله باهاش ارتباط برقرار کنم. شاید به خاطر اینکه از محیط دیگه ای به غیر اکلیپس استفاده میکنید گزینه ها متفاوت باشه. (8 سال پیش)
0 0
در اینصورت اگه از لیست ویو استفاده نمایید بهتر است چون با id شما به linear layout دسترسی پیدا میکنید نه به imageview درون آن (8 سال پیش)
0 0
اول از listView استفاده کردم. خواستم دو تا layout رو تو یک Activity به دلایلی استفاده کنم. کمی گیج شدم. گفتم بذارم واسه بعد که اطلاعاتم بهتر شد از listView استفاده کنم. فعلا همین روش خیلی عالی ه و خواسته منو برآورده میکنه. اگر میشه به این لینک برید . شما روش بهتری سراغ دارید؟ (8 سال پیش)
پاسخ به سوال 
gadolf  8 سال پیش
+1 0

همین متد با استفاده از ID تعریف شده در هر listView (نیازی به تغییر کلاس AppPrefrances تعریف شده در بالا نیست):

 public void heart(int heartId, int listViewId) {
        final String NameId = listViewId + "";
        final ImageView heart = (ImageView) findViewById(heartId);

        if (AppPrefrances.getInstance(getApplicationContext()).getClicked(NameId).equals("1")) {
            heart.setImageResource(R.drawable.heart_fill);
        } else {
            heart.setImageResource(R.drawable.heart_empty);
        }

        heart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View V) {

                if (AppPrefrances.getInstance(getApplicationContext()).getClicked(NameId).equals("1")) {
                    heart.setImageResource(R.drawable.heart_empty);
                    AppPrefrances.getInstance(getApplicationContext()).setClicked(NameId, "0");
                } else {
                    heart.setImageResource(R.drawable.heart_fill);
                    AppPrefrances.getInstance(getApplicationContext()).setClicked(NameId, "1");
                }

            }
        });
    }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .