0
@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 中使用上面的代码来显示列表视图。
lvt 是一个应用程序全局数据。
如果显示为真,我想消失单元格。
但不删除数据。
但是我的方法不会显示数据,而是显示分隔线。
我该怎么做?

4

3 回答 3

1

你不能做你所要求的。
如果 BaseAdater.count() 返回所有项目的计数(甚至是你不想显示的项目),那么你不能告诉 getView() 方法“忽略”一些逻辑项目。

我建议您做的是过滤您的数据列表(创建一个新的 lvt),使其仅包含您希望 listView 显示的项目,然后才 - 适配器应该使用这个新的逻辑数据。

在您的情况下,正如您所怀疑的那样-“lvt.getShowAt(position) = false”应该是您的过滤器指标

于 2012-05-28T04:10:56.003 回答
1

如果您想隐藏ListView 中的项目,我希望您单独lvt(仅显示真实)而不是尝试操纵视图。

于 2012-05-28T04:12:07.503 回答
0

我修改 getCount 如下:

@Override
public int getCount() {
    int count = 0;
    int i;
    for(i = 0; i < lvt.sizeTestArray(); i++) {
        if(!lvt.getfiv1At(i)) {
            count++;
        }
    }
    return count;
}

并在 getView 中更改位置,如下所示:

    int i;
    int count = 0;
    for(i = 0; i < lvt.sizeTestArray(); i++) {
        if(!lvt.getfiv1At(i)) {
            if(count == position) {
                position = i;
                break;
            }
            count++;
        }
    }

现在看来做得很好。
但我不确定现在是否存在任何错误。

于 2012-05-28T06:47:22.653 回答