我正在尝试更改ActionBar的操作,具体取决于所有列表项是否可见(适用于屏幕的项目较少=>显示“添加项目”操作|有些项目不可见=>显示“搜索”动作)
我应该覆盖哪种ListFragment方法才能使用getListView()。getLastVisiblePosition()并且得不到-1?
这是我的ListFragment中的代码,但在onCreateOptionsMenu中,lv.getLastVisiblePosition()始终返回-1。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.list, menu);
final MenuItem search = menu.findItem(R.id.menu_item_search);
final MenuItem add = menu.findItem(R.id.menu_item_add_item);
final ListView lv = getListView();
if (lv.getFirstVisiblePosition() == 0 && lv.getLastVisiblePosition() == mAdapter.getCount()-1) {
// all items visible: show add, hide search
search.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
} else {
// not all items visible: show search, hide add
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
// ...
}
答案 0 :(得分:1)
getLastVisiblePosition
仅在添加适配器的项目并通过软管ListView
进行布局时返回有效位置,我不知道任何问题ListView
何时发生的方法,所以最好的选择就是在UI线程阻塞等待更多消息时进行监听:
Looper.myQueue()。addIdleHandler
并在getLastVisiblePosition()
IdleHandler#queueIdle()
答案 1 :(得分:0)
要在ListView
中获得可见的子计数。
int visibleChildCount = (listView.getLastVisiblePosition() - listView.getFirstVisiblePosition()) + 1;
现在获得ListView
中的总儿童数,
int totalChildCount = listView.getAdapter().getCount;
隐藏/显示操作栏图标。
if(totalChildCount>visibleChildCount){
// Visible
}else{
// Gone
}
希望这会对你有所帮助。