Как сохранить состояние видимости меню через общие предпочтения?
Привет. В моем приложении я добавляю пункт меню на панель действий под названием "добавить в избранное", показанную белой звездочкой. Когда пользователь нажимает на него, этот значок исчезает, и появляется видимость другого желтого значка звездочки... это работает нормально... но проблема в том, что при переключении на другое действие или при перезапуске приложения предыдущее событие теряется. Как я могу сохранить это через общие настройки??.. Вот мой код.
On prepareoptionmenu (Menu menu){
If (ffavClicked){
menu.finditem (R.id.id_favorite).setvisible (false);
menu.finditem (R.id.id_favorite 2). setvisible (true);
}
else if (! favClicked){
menu.finditem ( R.id.id_favorite).setvisible (true);
menu.finditem (R.id.id_favorite 2).setvisible (false);
}
return ssuper . onprepareoptionmenu (menu);
}
2 ответа
Решение
Я надеюсь, что это решит вашу проблему!
в вашей деятельности определите сначала логическое значение
public class Atherosclerosis extends Activity {
boolean favClicked;
использовать это в вашем при создании.
setContentView(R.layout.activity_main);
SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this);
favClicked = myPrefs.getBoolean("menu_item", false);
а потом
public boolean onOptionsItemSelected(MenuItem item) {
SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor editor = myPrefs.edit();
favClicked = myPrefs.getBoolean("menu_item", false);
switch (item.getItemId()) {
case R.id.id_favorit:
favClicked=true;
editor.putBoolean("menu_item", favClicked);
editor.commit();
invalidateOptionsMenu();
return true;
case R.id.id_favorit2:
favClicked=false;
editor.putBoolean("menu_item", favClicked);
editor.commit();
invalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(favClicked==true){
menu.findItem(R.id.id_favorit).setVisible(false);
menu.findItem(R.id.id_favorit2).setVisible(true);
}else{
menu.findItem(R.id.id_favorit).setVisible(true);
menu.findItem(R.id.id_favorit2).setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
}
Я надеюсь, что это поможет вам:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
SharedPreferences prefs = getSharedPreferences("YOURprefsName",
Context.MODE_PRIVATE);
ffavClicked = prefs.getBoolean("favClicked", false);
if (ffavClicked){
menu.finditem (R.id.id_favorite).setvisible (false);
menu.finditem (R.id.id_favorite 2). setvisible (true);
} else if (!ffavClicked){
menu.finditem ( R.id.id_favorite).setvisible (true);
menu.finditem (R.id.id_favorite 2).setvisible (false);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
protected void onPause() {
SharedPreferences prefs = getSharedPreferences("YOURprefsName",
Context.MODE_PRIVATE);
prefs.edit().putBoolean("favClicked", ffavClicked).commit();
super.onPause();
}