2012-06-17 72 views
6

我猜getView()被调用列表中的每个项目,但我的问题是,如果与该行关联的数据为空,我们是不是可以显示该行?我只想在getView()之内这样做。跳过列表视图中的一行

例如:

如果警报一个人的名字在列表视图中显示的null.I不想显示该人的列表视图名称。

+0

为什么不在过滤发送给listview之前的人? –

+0

是的,我已经做到了..但我想知道是否有一种方法,我们可以在getView()..中做到这一点? – Rookie

+0

你不能。在将适配器提交到列表视图之前,您必须先筛选值 – Blackbelt

回答

20

在返回视图之前,您可以将该行的visibility设置为在最后一行中“消失” - 这应该适合您。

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

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

我不这么认为.coz列表视图中的每一行都有相同的ID,因此它将设置所有上面的行的可见性消失。 – Rookie

+1

这是不正确的 - 如果内容为空或者没有,您只需检查每行,并将可见性设置为可见或不可见。 – Tim

+0

是的,我错了..这工作谢谢:) – Rookie

1

嗨帕尔斯我试着设置知名度,无形的,但我仍可以看到在ListView一个空行,所以我改变一点点,并根据我的需要,因此值得分享,如果有人需要类似的结果,像它的工作矿。

我使用名单源我的要求是跳过一些应用程序,因此我所做的是我删除从列表应用通知数据集变化的

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