【问题标题】:ArrayAdapter draw view for some row(not for all row) in arraylistArrayAdapter 为arraylist中的某些行(不是所有行)绘制视图
【发布时间】:2014-03-26 07:32:38
【问题描述】:

在我的应用程序中,我使用自定义 ArrayAdapter 从 ArrayList 填充 ListView。 在 ArrayList(In the object) 的每一行中都有一个 Flag(boolean)。如果将其标记为 true,则填充此行,否则什么也不做。

假设:-(一个包含一个字符串和一个布尔值的类,比如classA)

ArrayList<classA> listA

现在只想为对象中布尔类型为 true 的 ArrayList(此处为 listA) 的那些行填充 ListView(此处为 classA 布尔值)

我试试这个:-

@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 绘制视图,但内容为空。

【问题讨论】:

  • 从 ArrayList 中删除标志设置为false的所有对象...
  • 您可以仅填充数组列表所需的数据。如果数据有任何变化,你可以通知datasetchanged方法。
  • 你在 textview 中哪里设置你的 arraylist 数据?
  • @GopalRao ...此外,我还需要做一些其他任务,因此我无法删除那些标志为假的对象,或者我没有创建其他仅包含真标志对象的数组列表
  • @VinitVikash 嗯……我没听懂你在说什么。您可以创建一个新的 ArrayList 并将其标志设置为 true 的所有对象添加到此列表中,并将此列表用作您的 ListView 的数据集...

标签: android android-listview android-arrayadapter


【解决方案1】:

getView 方法中返回null 每次都会使您的ListView 崩溃。我建议您执行以下操作:

首先,过滤ArrayList,例如:

final List<Something> filteredList = new ArrayList<Something>(unfilteredList.size());
for (Something item : unfilteredList) {
  if (item.isFlagChanged()) { filteredList.add(item); }
}

其次,使用filteredList 填充您的适配器。

【讨论】:

  • 在我的 ListView 中有一个选项可以在用户长按该行时删除该行。如果我按照你上面提到的那样做,那么它会删除新创建的 Arraylist 中的行,而不是原始 Arraylist 中的行。这就是为什么我不能做你上面提到的事情。
  • @VinitVikash 因此,当用户长按时,从原始数组列表和新创建的数组列表中删除相应的对象
  • @Gopal Rao 为此,我需要在 classA 中添加一些参数,例如 Id,并且需要匹配 id(使用 for 循环),然后需要从原始 Arraylist 中删除该行。我需要编写很多额外的代码来完成这项任务。如果没有其他选择,我会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多