在列表视图中跳过一行

10

我猜想getView()会为列表中的每个项目调用一次,但我的问题是,如果与该行相关联的数据为空,我们可以不显示该行吗?我只想在getView()内部完成此操作。

例如:

如果要在列表视图中显示的人的警报为空,我不想在列表视图中显示该人的姓名。


为什么不在将人员发送到列表视图之前进行筛选? - Shahzad Imam
是的,我做过了...但我想知道是否有一种方法可以在getView()内部完成这个操作? - Rookie
在将适配器提交到列表视图之前,您必须先过滤值。 - Blackbelt
尝试在返回视图时将convertview设置为null。 - Shahzad Imam
@Raghav:你得到了答案,只需要展示最后一行代码是什么? - Shahzad Imam
2个回答

25

在返回View之前的最后一行,您可以将该行的可见性设置为“gone” - 这对您应该有效。

编辑:请确保如果内容不为空,则将可见性设置为可见 - 否则当ListView重用视图时所有视图都将变为“gone”。

myView.setVisibility((myData == null) ? View.GONE : View.VISIBLE);

我不这么认为。因为列表视图中的每一行都具有相同的ID,所以它将把所有上面的行的可见性设置为消失。 - Rookie
1
那不正确 - 你只需要检查每一行的内容是否为空,然后将可见性设置为可见或隐藏。 - Tim
嘿,你能给我一个示例展示notifyDataSetChanged()的工作原理吗? - Rookie
我认为这不是最好的解决方案。只需尝试设置您的特定条件并增加在getView中的位置编号。 - Setmax
7
尝试了这个解决方案,它在列表中创建了空白位置。 - Shivaraj Patil
显示剩余9条评论

1

大家好,我尝试将可见性设置为不可见,但在列表视图中仍然可以看到一个空行,所以我稍微改了一下,根据我的需求它起作用了,因此值得分享,如果有人需要类似的结果。

我使用列表作为源,我的要求是跳过一些应用程序,所以我从列表中删除了该应用程序并通知数据集更改

public AppListAdapter(Context context, List<ApplicationInfo> appList) {
        this.context = context;
        this.appList = appList;
        inflater = LayoutInflater.from(context);
        localStorage = new LocalStorage(context);
        pm = context.getPackageManager();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
              convertView = inflater.inflate(R.layout.applist_item, parent, false);
            // Other lines of code
        if(appName.length()==0 || getItem(position).packageName.equals("package.name.to.skip")) {
              appList.remove(position);
              notifyDataSetChanged();
        }
    return convertView;
}

注意事项

appList.remove(position);
notifyDataSetChanged();

欢迎您提出建议和纠正。
AzmatHunzai


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接