如何通过 sharedpreferences 保存 menuitem 可见性状态?

Posted

技术标签:

【中文标题】如何通过 sharedpreferences 保存 menuitem 可见性状态?【英文标题】:how to save menuitem visibility state through sharedpreferences? 【发布时间】:2014-02-23 18:55:05 【问题描述】:

嗨,在我的应用程序中,我在操作栏上添加了一个名为“添加到收藏夹”的菜单项,由白色星形图标显示。当用户单击它时,此图标消失并且其他黄色星形图标项目可见性出现......这工作正常......但问题是当我切换到另一个活动或当我重新启动我的应用程序时,前一个事件已经丢失。如何通过 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);

【问题讨论】:

【参考方案1】:

希望这能解决你的问题!

在您的活动中首先定义布尔值

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


   

【讨论】:

【参考方案2】:

希望对你有帮助:

@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();

【讨论】:

Oppss 出了点问题......现在有了这个变化,其他项目没有出现,第一个项目也没有消失。 .我现在该怎么办? 不工作请看看缺少什么..可见性选项不工作

以上是关于如何通过 sharedpreferences 保存 menuitem 可见性状态?的主要内容,如果未能解决你的问题,请参考以下文章

将 ArrayList 保存到 SharedPreferences

手机日期更改时从 sharedpreference 中删除保存的数据

通过SharedPreferences实现简单的记住登录状态和保存密码

如何将整数保存到 SharedPreferences [重复]

如何将 SharedPreferences 中的数据保存并显示为列表?

如何在 SharedPreferences 中保存和检索日期