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;
    }

相关文章推荐

ListView 隐藏 某个Item

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

ListView子项item的显示与隐藏

1. 在getView方法中写入:     //记录当前展开项的索引       private int expandPosition = -1;  QueryOrderResul...

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

最近在做个项目,有个需求涉及到一个功能,大概就是过滤掉listview的某个item,百度了一下,发现没啥好的解决方法,于是还是google一下,果然搞出了答案,记录一下,方便他人~   L...

Android 动态获取ListView的高度

public static int getTotalHeightofListView(ListView listView) { ListAdapter mAdapter = listView....

Android笔记 四种方案解决ScrollView嵌套ListView问题之动态设置ListView高度代码整理

四种方案解决ScrollView嵌套ListView问题之动态设置ListView高度代码整理

ListView 动态设置高度问题

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

根据Item数动态设定ListView高度

//此方法在setAdapter之后调用 public static void setListViewHeightBasedOnChildren(ListView listView) {     Li...

【Android多屏适配】动态改变Listview item高度

在ListView的Adapter中去直接获取传入View的LayoutParams是会报空指针异常的,唯一的方法是在xml中嵌套布局一层LinearLayout ...

android listview的item的展开与隐藏

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ListView 动态设置ItemView高度为0隐藏Item
举报原因:
原因补充:

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