2013-08-26 190 views
0

我在我的操作栏中有一个项目菜单(排序列表),我必须将其可见性设置为可见/去(取决于列表大小 - >是否为空)。Android操作栏菜单项

所以我需要的是检查listview是否为空,并相应地设置该菜单项的可见性,我设法想出了一些代码来做到这一点(检查onCreateOptionsMenu中的listview大小并设置菜单项的可见性),但问题在于列表可以从同一活动或从另一个活动更改其内容,使我无法选择(IMO)而不是再次检查listview大小并在onResume()中设置可见性。

接下来的问题是:在onResume()中设置该项目的可见性,将会抛出一个NPE,因为我还没有初始化该MenuItem(在onResume之后调用onCreateOptionsMenu)。 任何想法如何解决这种情况,将不胜感激。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    getSupportMenuInflater().inflate(R.menu.main, menu); 

    /* 
    * initialize sortMenuItem so it can be used for turning visibility 
    * on/off in onResume() 
    */ 
    sortMenuItem = menu.findItem(R.id.menu_sort); 

    return true; 
} 

@Override 
public void onResume() { 
    super.onResume(); 

    boolean isListEmpty = mInterviewsList.isEmpty(); 

    Log.d(LOG_TAG, "sortMenuItem is null? " + (sortMenuItem == null)); 
      // sortMenuItem is indeed null 

    sortMenuItem.setVisible(isListEmpty); 
    sortMenuItem.setEnabled(!isListEmpty); 
    this.invalidateOptionsMenu(); 

} 
+0

我认为无论您使用notifyDataSetChanged()更新listview的内容,您都可以设置菜单项的可见性。不是吗? –

+0

我的问题是在实际修改listview之前获取sortMenuItem对象,因此它不会再抛出NPE。 – DoruAdryan

回答

2

可以dynamicaly在onCreateOptionsMenu取决于你的列表视图大小和通话的onResume如果supportInvalidateOptionsMenu()使用添加sortMenuItem(谷歌动作条COMPAT LIB)或类似的方法。

+0

这是我真的在做(或多或少)。我实际上做的是从xml中调用sortMenu,并调用invalidateOptionsMenu,但它不会到达那里,因为它停在onCreate的sortMenuItem.setVisible(isListEmpty)处。 (NPE) – DoruAdryan

+0

我也根据您的回答对其进行了相应修改,结果相同。 – DoruAdryan

+0

此活动或片段中的代码? – x90