Android ListView 动态设置ItemView高度为0隐藏Item

原创 2016年08月28日 18:41:26

隐藏ItemView  

前言

   在使用Adapter加载ItemView时应该使用:

inflater.inflate(R.layout.my_layout, parent, false);

  不然会导致ItemView的高度仅仅是wrap_content,除非在my_layout中再嵌套一层Layout并指定高度。
  

隐藏ItemView

  设置某一项Item的高度主要是设置该ItemView的高度,我们可以在getView中调用:
  

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        /**
         * other code
         */
        if (condition) {
            ViewGroup.LayoutParams params = v.getLayoutParams();
            params.height = 1;// 这里不能设置高度为0,然后会有一个空白
            v.setLayoutParams(params);
            v.setVisibility(View.GONE);
            ((ViewHolder) v.getTag()).needReInflate = true;
        }
        /**
         * other code
         */
    }

我们可以看到有这么一行代码:

((ViewHolder) v.getTag()).needReInflate = true;

这个是为了考虑到ListView的convertView回收机制,应为设置高度为0已经隐藏掉的Item已经不适用于ListView滚动时给其他Item复用,所以要在ViewHolder中加入一个flag标识需要重新inflate一个ItemView,具体可以看看convertView的生成代码:

View view;
ViewHolder holder;
if (convertView == null) {
    holder = new ViewHolder();
    LayoutInflater inflater = 
    (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.my_layout, parent, false);
    view.setTag(holder);
// 如果是改变过高度的ItemView,需要重新inflate一个ItemView  
} else if (((ViewHolder)convertView.getTag()).needReInflate) {
    holder = new ViewHolder();
    LayoutInflater inflater = 
    (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.my_layout, parent, false);
    view.setTag(holder);
else {
    view = convertView;
}

再来看看ViewHolder的定义:

    protected static class ViewHolder {
        View view1;
        View view2;
        View view3;

        boolean needReInflate;
    }

android解决无法设定listview的item高度

在item的layout文件中,用android:layout_height设置item的高度。 运行,高度设置无效。 解决办法: 给item设定minHeight,即可. -...
  • tianshuguang
  • tianshuguang
  • 2014年08月06日 09:18
  • 16057

安卓ListView根据Adapter动态设置高度

安卓ListView根据Adapter动态设置高度
  • junjle
  • junjle
  • 2016年08月29日 14:30
  • 1333

Android中设置ListView的item高度无效--解决方案

问题:       ListView的使用中,item是在adapter中用来显示每一个小条目的数据结构,也是一个xml文件,应用非常灵活和广泛,这里说一个经常遇到的问题,对于刚接触Android的朋...
  • u012369385
  • u012369385
  • 2017年01月17日 10:23
  • 1890

listview 高度自适应(根据listview的条数 确定高度 )

今天开发遇到一个问题,就是当动态插入ListView数据的时候,由于之前ListView的高度已经固定死了,所以显示不完整的数据,并且底部显示黑边。如图: 而我希望这个Lis...
  • amor5216
  • amor5216
  • 2016年05月31日 17:53
  • 5275

Android ListView的每个子Item如何设置高度

在item的layout文件中,用android:layout_height设置item的高度。运行,高度设置无效。 据了解,listview每行的宽度是由 inflater填充布局中高度最大的那个...
  • libaineu2004
  • libaineu2004
  • 2014年11月21日 08:58
  • 28903

如何动态测量ListView的高度?

网络上已经有很多这方面的文章,甚至完整的代码。 但是,我发现如果ListView的Item布局比较复杂,或者某个View有多行显示时,网上的代码测量出来的高度是错误的。 这里,结合自己的实践以及一...
  • javine
  • javine
  • 2016年06月03日 14:35
  • 5184

ListView 隐藏 某个Item

算数据过多,所以pass掉数据处理。 android隐藏listview中的某一项,可试的无效方法: 1.view.setVisibility(View.GONE); //invisible 同样会留...
  • a2241076850
  • a2241076850
  • 2016年10月18日 15:15
  • 4484

android listview的item的展开与隐藏

实现listview展开与隐藏item的思路: 在item布局里面在写一个布局,使用布局方式根据需要来(如果需要展开的item在点击的item上面,就使用相对布局或者帧布局;如果需要展开的item在...
  • u010694658
  • u010694658
  • 2016年07月14日 14:53
  • 2630

ListView组件中怎么使item布局文件中的组件隐藏

ListView组件中如何使item布局文件中的组件隐藏 比如ListView组件的item的布局文件有2个textview items.xml   android:id="@+id/l...
  • skyzhd
  • skyzhd
  • 2016年04月06日 18:41
  • 831

android 如何过滤掉listview中符合某个条件的item

最近在做个项目,有个需求涉及到一个功能,大概就是过滤掉listview的某个item,百度了一下,发现没啥好的解决方法,于是还是google一下,果然搞出了答案,记录一下,方便他人~   ...
  • lj188266
  • lj188266
  • 2015年10月23日 13:21
  • 3101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ListView 动态设置ItemView高度为0隐藏Item
举报原因:
原因补充:

(最多只允许输入30个字)