Как сохранить состояние видимости меню через общие предпочтения?

1

Привет В моем приложении я добавляю элемент меню на панели действий, называемый "добавить в избранное", отображаемый значком "Белая звезда". Когда пользователь нажимает на этот значок, этот значок исчезает, появляется другая видимость элемента желтой звезды. Это хорошо работает. Но проблема в том, что при переключении на другое действие или при перезагрузке приложения предыдущее событие было потеряно. Как я могу сохранить это через sharedpreferences??..  Вот мой код.

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);
}
Теги:
sharedpreferences

2 ответа

0
Лучший ответ

Надеюсь, это решит вашу проблему!

в вашей деятельности сначала определите boolean

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);
            }


   }
  • 0
    Огромное спасибо ... ты решил мою проблему.
0

Надеюсь, это поможет вам:

@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();
}
  • 0
    Oppsss что-то не так .. теперь с этим изменением, другой элемент не появляется и первый не исчезает. , Что мне теперь делать?
  • 0
    Не работает, пожалуйста, посмотрите, что не хватает .. не работает опция видимости

Ещё вопросы

Сообщество Overcoder
Наверх
Меню