2 myq 26 myq_26 于 2013.07.05 13:14 提问

如何隐藏 ListView 中的一些 cell?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewTag viewTag;
    if(convertView == null) {
        convertView = myInflater.inflate(R.layout.row_item, null);
        viewTag = new ViewTag((LinearLayout)convertView.findViewById(R.id.row), (TextView)convertView.findViewById(R.id.tv));
        convertView.setTag(viewTag);
    }
    else {
        viewTag = (ViewTag) convertView.getTag();
    }

    viewTag.tv.setText(lvt.getTextAt(position));
    viewTag.tv.setVisibility(View.VISIBLE);
    boolean show = lvt.getShowAt(position);
    if(show) {
        viewTag.tv.setVisibility(View.GONE);
        viewTag.ll.setVisibility(View.GONE);
    }
    else {
        viewTag.ll.setVisibility(View.VISIBLE);
    }
    return convertView;
}

我使用上面的代码在 BaseAdapter中显示list view。
Lvt是一个程序中的全局数据。
如果显示是 true,我想隐藏 cell,但不能删除数据。
但是我的方法不显示数据,但是显示分割线。
如何隐藏 ListView 中的一些 cell?

3个回答

cj6585256
cj6585256   2013.07.05 14:13
已采纳

直接item设置Visable和Gone是不能解决的,因为还是会留下一个null的item(占位置)
最好的方法就是构建数据的时候,类似List<Bean> beans这种

Bean中有属性

private boolean isVisable = false;
//getter setter
public void setVisable(boolean isVisabele) {
this.isVisable = isVisable;
}

public boolean isVisable(){
return this.isVisable();
}

直接在setAdapter前把isVisable = gone 的排除掉
再设置adapter,把去除后的List传递进去

diyox
diyox   2013.07.15 23:30

哥,我明白你的意思,你可以试着这样做,一定可以的:
1、分割线不要用默认的,自己在cell的布局里实现,这点应该没问题吧?
2、把你的cell的布局用layout包一层,如下面:

<Relativelayout>
    <Relativelayout
      android:id="@+id/这一层是你要添加的,如果需要隐藏时,设置这一层visible为gone">
        <Textview/>
        <Textview/>
    </Relativelayout>
</Relativelayout>

你包着的东西为gone时,是不占空间的,界面上表现出来的就是这个cell没有了

xiaoxue1125
xiaoxue1125   2013.07.23 17:07

view.setVisable(View.GONE)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!