我遇到了这个问题:在我的class.java
我有一个私有方法(我在onRemoteCallListenerComplete
中调用它),它详细说明了我想要在菜单中显示的数据。此方法速度不是很快,应用程序在onCreateOptionsMenu
完成之前调用onRemoteCallListenerComplete
方法。
我已阅读使用void invalidateOptionsMenu()
方法 - 使onCreateOptionsMenu
无效并重新调用 - 我在onRemoteCallListenerComplete
结束之前附加了此内容。但是,onOptionsItemSelected
方法不会被重新调用。
注意:对不起我(可怕的)英语
以下我把我的代码
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.dati_carriera, menu);
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
MenuItem item = menu.findItem(R.id.expandableListView1_checkable);
if(sizeValueCollection>0){
item.setVisible(false);
}else{
boolean value = prefs.getBoolean(PREFERENCE_EXPANDIBLE_LIST_VIEW, true);
if(value)
item.setChecked(true);
else
item.setChecked(false);
}
return super.onCreateOptionsMenu(menu);
}
onOptionsItemSelected方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
Toast.makeText(this, "onOptionItemSelceted", Toast.LENGTH_LONG).show();
final ExpandableListView tv;
int id=item.getItemId();
switch(id){
case R.id.expandableListView1_checkable:
tv = (ExpandableListView) findViewById(R.id.expandableListView1);
if(item.isChecked()){
item.setChecked(false);
tv.setVisibility(ExpandableListView.GONE);
Editor prefsEditor = prefs.edit();
prefsEditor.putBoolean(PREFERENCE_EXPANDIBLE_LIST_VIEW, false);
prefsEditor.commit();
}else{
item.setChecked(true);
tv.setVisibility(ExpandableListView.VISIBLE);
Editor prefsEditor = prefs.edit();
prefsEditor.putBoolean(PREFERENCE_EXPANDIBLE_LIST_VIEW, true);
prefsEditor.commit();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
onRemoteCallListenerComplete
@Override
public void onRemoteCallListenerComplete(String dati) {
// TODO Auto-generated method stub
[...]
sizeValueCollection=valueCollection.size();
invalidateOptionsMenu();
}
sizeValueCollection是一个初始化为-1的私有int变量
答案 0 :(得分:0)
如果您使用支持包中的活动
,请尝试使用supportInvalidateOptionsMenu()答案 1 :(得分:0)
您可以保留对Menu对象的引用,并在收到所有必需数据后对其进行更新。
public class MyActivity extends Activity {
private Menu menu;
private MyMenuData myMenuData;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
// Prepare menu
this.menu = menu;
if(myMenuData != null){
// Data is loaded, menu can be updated now
updateMenu(myMenuData);
}
return super.onCreateOptionsMenu(menu);
}
public void onRemoteCallListenerComplete(MyMenuData data){
this.myMenuData = data;
updateMenu(data);
}
private void updateMenu(MyMenuData menuData){
// Update your menu here
}
}