Android OpenOptionsMenu 在触发一次后不更新

Android OpenOptionsMenu not updating after firing off once

首先,我有一个列表视图的基本适配器,每一行都有一个唯一的 message.I 我试图让 OpenOptionsMenu 在 OnClick 事件后更新,但发生的是在第一个 Onclick 事件后,相同的消息一遍又一遍地发布而忽略了新消息。我在该 Onclick 事件中有一个 toast,并且该 toast 为被单击的每一行显示一条新消息,所以要么是我的 SharedPreferences 没有更新,要么是我的 OpenOptionsMenu 在第一次点击后没有更新。

   //inside BaseAdapter
    holder.share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try {
              // This is a unique value depending on the row clicked
                String mm=jsonObject.getString("post");

                SharedPreferences userInfo= m.getSharedPreferences("userInfo", m.MODE_PRIVATE);
                SharedPreferences.Editor editor= userInfo.edit();
                editor.putString("share",mm);
                editor.commit();
          // This does not update after the first click
                m.openOptionsMenu();
      // can confirm here that new value is added after every OnClick
                Toast.makeText(m.getApplicationContext(),"New Values: "+mm,Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
               Toast.makeText(m.getApplicationContext(),"error",Toast.LENGTH_SHORT).show();
            }

    }
    });

我这样做的原因是因为我合并了 android 轻松共享操作 http://developer.android.com/training/sharing/shareaction.html 并用列表视图中的行中的数据预填充它。 OnCreateOptionsMenu 看起来像这样

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_login, menu);
        MenuItem shareItem= menu.findItem(R.id.action_share);
        SharedPreferences   sp_myaccount = getSharedPreferences("userInfo", MODE_PRIVATE);
        String acc=   sp_myaccount.getString("share", "");
        System.err.println("uud: " + acc);
Toast.makeText(LocalFeed.this,"clicked",Toast.LENGTH_SHORT).show();
        ShareActionProvider  mShare= (ShareActionProvider)shareItem.getActionProvider();
        Intent ShareIntent=new Intent(Intent.ACTION_SEND);
        ShareIntent.setAction(Intent.ACTION_SEND);
        ShareIntent.setType("text/plain");
        ShareIntent.putExtra(Intent.EXTRA_TEXT, acc);
        mShare.setShareIntent(ShareIntent);
        return true;
    }

注意到我在其中也有一条 toast 消息,可以确认它仅在第一个 Onclick 事件时触发。这是典型的预填充消息的样子

我做了更多测试,我很确定问题出在

  m.openOptionsMenu();

有没有办法刷新它?

您应该使用 invalidateOptionsMenu,这将强制再次调用 onCreateOptionsMenu。它从 api 级别 11 开始可用。