回想一下,onCreateOptionsMenu方法(更多次)

时间:2015-06-10 12:44:29

标签: android

我遇到了这个问题:在我的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变量

2 个答案:

答案 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
    }
}