【发布时间】:2016-03-17 17:16:29
【问题描述】:
我正在尝试根据所有列表项是否可见来更改 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);
}
// ...
}
【问题讨论】:
-
尝试
Looper.myQueue().addIdleHandler并在IdleHandler内调用getLastVisiblePosition -
@pskink,我尝试将它添加到 onActivityCreated 中,它可以工作,但是:如果我返回 true,即使没有任何更改或移动,它也会一次又一次地被调用,如果我返回false 它只工作一次
-
你希望它被调用一次,不是吗?如果不是,则每次适配器大小更改时返回“false”和
addIdleHandler -
@pskink 有效,我将它添加到我的适配器的 notifyDataSetChanged。如果您将其添加为答案,我会接受它
标签: android listview android-listfragment