美文网首页
ListView的使用

ListView的使用

作者: geaosu | 来源:发表于2019-08-22 15:25 被阅读0次

ListView的使用

属性介绍:

判断ListView的第一个item是否完全显示出来

以下内容来自: https://blog.csdn.net/zhang_duo/article/details/20942703

if (mListView.getFirstVisiblePosition() == 0){
    // 当前显示出来的第一项就是所有item中的第一项,下面判断是否完全显示
    if (mListView.getChildAt(0).getTop() >= 0) {
        // 第一项完全显示出来
    }
}

//也可以写成这样:
if (mListView.getChildCount() > 0 && mListView.getFirstVisiblePosition() == 0 && mListView.getChildAt(0).getTop() >= 0) {
    return true;
}

说明:
ListView.getChildCount()
返回的是这个listView当前显示出来的item数量,也就是在屏幕上可以看到的数量。

ListView.getChildAt(int pos)
返回的是这个listView当前显示出来的item中的第pos项,也就是说索引是从显示出来的第一项开始计算的,如果屏幕上方有n个item看不见,那么这个函数的返回值就是n

ListView.getFirstVisiblePosition()
返回值是当前可以看到的第一个item,在所有item中(包括看不到的)的位置。

View.getTop()
返回值是这个View相对于它的父控件的top值,对于item而言,如果item只有一半显示出来(下半部分),那么返回值应该是 - 这个item的高度

ListView - 嵌套问题


ScrollView里嵌套ListView导致ListView的item布局显示不全
    /**
     * creater : geaosu
     */
    public class ExpandListView extends ListView {
    
        public ExpandListView(Context context) {
            super(context);
        }
    
        public ExpandListView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ExpandListView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public ExpandListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2
                    , MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        }
    }

强烈推荐相关博客
    地址: http://blog.csdn.net/hanhailong726188/article/details/46136569
    他的csdn地址: http://blog.csdn.net/hanhailong726188

解决scrllView嵌套listview时, listview显示不全的问题


标签: geaosu android listView 嵌套
     /**
     *  描述 : 解决scrllView嵌套listview时, listview显示不全的问题;
     *  使用 : 在listView设置了adapter后调用, 传入当前的listview对象;
     **/
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        // 获取ListView对应的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0); // 计算子项View 的宽高
            totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        // listView.getDividerHeight()获取子项间分隔符占用的高度
        // params.height最后得到整个ListView完整显示需要的高度
        listView.setLayoutParams(params);
    }


动态控制listview显示条目的数量
参考博客:

  1. http://blog.csdn.net/yushic/article/details/50617082
  2. http://blog.csdn.net/tianxiangshan/article/details/7956488

相关文章

网友评论

      本文标题:ListView的使用

      本文链接:https://www.haomeiwen.com/subject/qjwnsctx.html