ArrayAdapter绘制arraylist中某行(不是所有行)的视图

时间:2014-03-26 07:32:39

标签: android android-listview android-arrayadapter

在我的应用程序中,我使用自定义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绘制视图,但内容为空。

1 个答案:

答案 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填充您的适配器。