如何/凡在code检测羯羊在ListFragment的ListView中的所有项目都可见? [英] How/where in the code to detect wether in ListFragment's ListView all items are visible?

查看:192
本文介绍了如何/凡在code检测羯羊在ListFragment的ListView中的所有项目都可见?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图改变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){
        //所有项目可见:显示添加,隐藏搜索
        sea​​rch.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 hosing ListView, i don't know any method of asking a ListView 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() inside IdleHandler#queueIdle()

这篇关于如何/凡在code检测羯羊在ListFragment的ListView中的所有项目都可见?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆