解决ListView显示不全、滑动冲突问题

简介: 解决ListView显示不全、滑动冲突问题

在开发中,ListView是使用得最多的控件,有时候会遇到ListView因为各种原因引起的数据显示不全,例如,嵌套了ScrollView等。这个解决的办法很多,这里记录一下我自己用过的方法,本人亲测有效。

第一种:

/**
 * 设置listview高度的方法
 * @param listView
 */
public void setListViewHeight(ListView listView) {
 //获取ListView对应的Adapter
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {//listAdapter.getCount()返回数据项的数目
        View listItem = listAdapter.getView(i, null, listView);   //获得每个子item的视图
        listItem.measure(0, 0);   //先判断写入的widthMeasureSpec和heightMeasureSpec是否和当前的值相等,如果不等,重新调用onMeasure(),计算子项View 的宽高
        totalHeight += listItem.getMeasuredHeight();   //累加不解释,统计所有子项的总高度
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));   //加上每个item之间的距离,listView.getDividerHeight()获取子项间分隔符占用的高度
    listView.setLayoutParams(params);//params.height最后得到整个ListView完整显示需要的高度
}



  这个方法需要在ListView.setAdapter(adapter)之后调用,这样就可以把数据显示完全了,这个方法可以写到工具类里面,然后直接调用。

第二种方法:

    /***
     * 設置listview的高度結局滑動衝突
     * 
     * @param statisticsTO
     */
    public void setListvHeight(StatisticsTO statisticsTO) {
        int size = statisticsTO.getData().size();
        int totalHeight = 0;
        for (int i = 0; i < size; i++) {
            View listItem = myAdapter.getView(i, null,
                    liststatistics);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = liststatistics.getLayoutParams();
        params.height = totalHeight
                + (liststatistics.getDividerHeight() * (size - 1));
        liststatistics.setLayoutParams(params);
    }



这种方法其实和第一种方法是类似的,只不过这里传入的是数据的实体。

第三种方法:

  第三种方法就是自定义ListView,然后重写onMeasure方法,这个可以解决ListView的滑动冲突,百度上说的最多的就是这种方法。

public class CustomListView extends ListView{
public CustomListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int spec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, spec);
}
}









相关文章
|
XML 数据格式
简单的TextView滚动跑马灯效果
今天遇到一个需求,需要TextVeiw 滚动显示,于是简单记录一下。
97 0
简单的TextView滚动跑马灯效果
|
Android开发
Android自定义ListView和GridView解决滑动冲突和显示不全
Android自定义ListView和GridView解决滑动冲突和显示不全
141 0
|
Android开发
NestedScrollView + ExpandableListView 显示不全问题和滑动冲突问题 。
NestedScrollView + ExpandableListView 显示不全问题和滑动冲突问题 。
|
Android开发 容器 Java
Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画
Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画 标准的Android RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘,会闪现灰白色水波纹动画,以这样大的动画效果提示用户已经滑动到边缘,没法再滑动了。
2927 0
|
Android开发
自定义布局实现侧滑菜单2
我们在上一节已经说了侧滑菜单的实现原理,并且实现了单侧菜单,这一节我们就完善项目,实现双向侧滑菜单。原理我们都说了,不明白的看上节,好了,直接上代码 /** * 这个类和SlidingLayout作用一样,只是没有实现触摸监听事件,直接在121行设置实现了 */ public class SlidingLayout1 extends LinearLayout { /** * 滚动显示和隐藏左侧布局时,手指滑动需要达到的速度。
795 0
|
Android开发
自定义布局实现侧滑菜单1
说起侧滑菜单,应该是一个很Low的话题了,现在几乎所有的app都有这个功能,但是既然大家都在用,那就再说说吧。本文参照郭霖大神的文章,我又重新组织了下,大家可以看原文章。
814 0
|
Web App开发
ImageList+Listview设计图片浏览器
需要在窗体增加imageList和listview控件,并把ListView控件的LargeImageList设置为imageList1 ListView控件显示图片的大小可以在imageList1控件中调整ImageSize属性,如果图片失真,可以设置imageList1控件的ColorDepth值为Depth32Bit.
741 0
|
Java
解决水平ListView在ScrollView中出现的滑动冲突
 解决的问题有两个: 1)实现水平滑动的ListView。重写AdapterView,上代码:  Java代码   package com.liucanwen.horizontallistview.view;      import java.util.LinkedList;   import java.util.Queue;      i
1578 0

热门文章

最新文章