在我的应用程序中,我使用自定义ArrayAdapter从ArrayList填充ListView。 在ArrayList的每一行中(在对象中)都有一个Flag(布尔值)。如果标记为true,则填充此行,否则不执行任何操作。
假设: - (一个类包含一个String和一个布尔值,比如classA)
ArrayList<classA> listA
现在想要仅为那些在对象中布尔类型为true的ArrayList(此处为listA)的行填充ListView(此处为classA boolean)
我试试这个: -
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (listA.get(position).isFlagChanged()) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(rowResourceId, parent, false);
TextView tViewProNameFrmLstViewBasket = (TextView) rowView.findViewById(R.id.tView);
return rowView;
}
return null;
}
在这种情况下它会抛出nullPointerException。
我也尝试了这个: -
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(rowResourceId, parent, false);
if (listA.get(position).isFlagChanged()) {
TextView tViewProNameFrmLstViewBasket = (TextView) rowView.findViewById(R.id.tView);
return rowView;
}
return rowView;
}
但它也会为false Flag绘制视图,但内容为空。
答案 0 :(得分:0)
在null
方法中返回getView
,每次都会导致ListView
崩溃。我建议你做以下事情:
首先,过滤ArrayList
,例如:
final List<Something> filteredList = new ArrayList<Something>(unfilteredList.size());
for (Something item : unfilteredList) {
if (item.isFlagChanged()) { filteredList.add(item); }
}
其次,使用filteredList
填充您的适配器。