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 开始可用。
首先,我有一个列表视图的基本适配器,每一行都有一个唯一的 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 开始可用。