Android OpenOptionsMenu не обновляется после однократного запуска
Прежде всего, у меня есть базовый адаптер для просмотра списка, и у каждой строки есть уникальное сообщение. Я пытаюсь заставить OpenOptionsMenu обновляться после события OnClick, но происходит то, что после 1-го события Onclick это сообщение снова и снова публикуется, игнорируя новые сообщения. У меня есть тост внутри этого события Onclick, и этот тост отображает новое сообщение для каждой строки, по которой щелкают, так что либо мои 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;
}
Заметил, что там тоже есть тостовое сообщение, и я могу подтвердить, что оно срабатывает только при первом событии Onclick. Вот как выглядит типичное предварительно заполненное сообщение
Я сделал еще несколько испытаний, и я уверен, что проблема с
m.openOptionsMenu();
есть ли способ обновить это?
1 ответ
Вы должны использовать invalidateOptionsMenu, который заставит onCreateOptionsMenu
быть вызванным снова. Это доступно начиная с уровня API 11.