ذخیره تغییرات بعد از خروج از برنامه
این برنامه شامل تعداد زیادی از linearLayout ه و من فقط دوتاشو این جا نشون دادم. من دو تا عکس قلب تو پوشه drawable دارم. یکی خاکستری و یکی قرمز. میخوام وقتی کاربر قلب رو انتخاب میکنه و قرمز میشه یا بالعکس، این تغییرات حتی در صورت خروج از برنامه هم ذخیره بمونه. من در اینجا از listView استفاده نکردم و به همین خاطر برای هر قلب، یک ID جداگانه تعریف کردم.
من میخوام تو متد پایین از SharedPrefernces استفاده کنم ولی هنوز نتونستم. SharedPrefernces تو کدوم قسمت از آموزش ها تدریس شده؟ با استفاده از علاقه مندی ها میتونم از همین عکس های قلب استفاده کنم؟
کلاس 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"); }
}
});
}
موفق باشید.
واقعاً از لطفت ممنونم که با توجه به کدهای من پاسخ دادید، ولی کد شما دو تا ایراد داره که برنامه اجرا نمیشه:
در کلاس AppPrefrances این خطا رو نشون میده:
و متدهای قابل استفاده این متدها هستند:
و اما در متد heart با توجه به متدی که در کلاس AppPrefrances تعریف شده باید هر دو مقدار String باشند. اعداد 0 و 1 رو تبدیل به String کنم؟
یک نکته دیگه اینکه چرا فقط از "LateralView" استفاده شده؟ هر چند درست کار نمیکنه چون شما اشراف کامل به برنامه من ندارید باز یه سرنخی به من دادید و واقعاً ممنونم.
همین متد با استفاده از 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"); } } }); }
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .