How/where在代码中检测ListFragment中的ListView是否所有item都可见?
How/where in the code to detect wether in ListFragment's ListView all items are visible?
我正在尝试根据所有列表项是否可见来更改 ActionBar 的操作(适合屏幕的项目较少 => 显示 "Add item" 操作 | 有一些项目不可见 => 显示 "Search" 动作)
为了能够使用 getListView().getLastVisiblePosition() 而不是 -1,我应该重写 ListFragment 的什么方法?
这是我的 ListFragment 中的代码,但在 onCreateOptionsMenu lv.getLastVisiblePosition() 中总是 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);
}
// ...
}
为了可见 child 计入 ListView
。
int visibleChildCount = (listView.getLastVisiblePosition() - listView.getFirstVisiblePosition()) + 1;
现在获取 ListView
、
中的总 child 计数
int totalChildCount = listView.getAdapter().getCount;
隐藏/显示操作栏图标。
if(totalChildCount>visibleChildCount){
// Visible
}else{
// Gone
}
希望对您有所帮助。
getLastVisiblePosition
returns 仅当适配器的项目被添加并通过软管 ListView
布置时有效位置,我不知道任何询问 ListView
的方法当它发生时,最好的选择就是在 UI 线程阻塞等待更多消息时监听:
Looper.myQueue().addIdleHandler
并在 IdleHandler#queueIdle()
中调用 getLastVisiblePosition()
我正在尝试根据所有列表项是否可见来更改 ActionBar 的操作(适合屏幕的项目较少 => 显示 "Add item" 操作 | 有一些项目不可见 => 显示 "Search" 动作)
为了能够使用 getListView().getLastVisiblePosition() 而不是 -1,我应该重写 ListFragment 的什么方法?
这是我的 ListFragment 中的代码,但在 onCreateOptionsMenu lv.getLastVisiblePosition() 中总是 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);
}
// ...
}
为了可见 child 计入 ListView
。
int visibleChildCount = (listView.getLastVisiblePosition() - listView.getFirstVisiblePosition()) + 1;
现在获取 ListView
、
int totalChildCount = listView.getAdapter().getCount;
隐藏/显示操作栏图标。
if(totalChildCount>visibleChildCount){
// Visible
}else{
// Gone
}
希望对您有所帮助。
getLastVisiblePosition
returns 仅当适配器的项目被添加并通过软管 ListView
布置时有效位置,我不知道任何询问 ListView
的方法当它发生时,最好的选择就是在 UI 线程阻塞等待更多消息时监听:
Looper.myQueue().addIdleHandler
并在 IdleHandler#queueIdle()
getLastVisiblePosition()