如何/凡在code检测羯羊在ListFragment的ListView中的所有项目都可见? [英] How/where in the code to detect wether in ListFragment's ListView all items are visible?
问题描述
我试图改变ActionBar的动作取决于阉所有列表项都是可见的(有适合屏幕=>显示添加项目的行动显得项|还有一些项目无形=>显示搜索行动)
我应该覆盖哪些方法ListFragment,以便能够使用getListView()。getLastVisiblePosition()和get不是-1?
这是从我的ListFragment code,但在onCreateOptionsMenu lv.getLastVisiblePosition()总是返回-1。
@覆盖
公共无效onCreateOptionsMenu(菜单菜单,MenuInflater气筒){
super.onCreateOptionsMenu(菜单,充气器);
inflater.inflate(R.menu.list,菜单); 最终的菜单项搜索= menu.findItem(R.id.menu_item_search);
最终的菜单项添加= menu.findItem(R.id.menu_item_add_item); 最终的ListView LV = getListView();
如果(lv.getFirstVisiblePosition()== 0&放大器;&放大器; lv.getLastVisiblePosition()== mAdapter.getCount() - 1){
//所有项目可见:显示添加,隐藏搜索
search.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}其他{
//不是所有的项目可见:显示搜索,隐藏加入
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
// ...
}
getLastVisiblePosition
返回时才加入并用软管<$ C $奠定了适配器的项目有效位置C>的ListView ,我不知道问了的ListView
,当它发生的任何方法,所以最好的办法是刚听的时候UI线程去阻塞等待更多的消息:
Looper.myQueue()。addIdleHandler
块引用>和呼叫
getLastVisiblePosition()
在IdleHandler#queueIdle()
I am trying to change the ActionBar's action depending on wether all list items are visible (there's less items that fit to the screen => show "Add item" action | there are some items invisible => show "Search" action)
What method of ListFragment should I override in order to be able to use getListView().getLastVisiblePosition() and get not -1?
This is the code from my ListFragment, but in onCreateOptionsMenu lv.getLastVisiblePosition() always returns -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); } // ... }
解决方案
getLastVisiblePosition
returns valid position only when adapter's items were added and layed out by a hosingListView
, i don't know any method of asking aListView
when it happens, so the best option would be just to listen when the UI thread goes to block waiting for more messages:Looper.myQueue().addIdleHandler
and call
getLastVisiblePosition()
insideIdleHandler#queueIdle()
这篇关于如何/凡在code检测羯羊在ListFragment的ListView中的所有项目都可见?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!