数组列表检查值是否存在,如果存在则将1添加到字符串

时间:2015-10-21 21:38:21

标签: android arraylist android-listview android-gridview

假设我有一个名为listitem的数组列表,每次点击GridView时都会更新。 它获取被单击的GridView项,并将其添加到数组列表中,该列表也用作ListView的适配器的后备数组。 这工作正常,但我没有向ListView添加相同的行,而是在点击两次时显示item_clicked (2)之类的消息, 如果再次点击它会显示item_clicked (3)等等。

我尝试用这段代码来解决这个问题:

public void addItems(int position) {
    if (listItems.contains(value.get(position))) {
        int index = listItems.indexOf(value.get(position));
        listItems.set(index,value.get(position)); <- here
    } else {
        listItems.add(value.get(position));
        adapter.notifyDataSetChanged();
    }
}

positionGridView的索引,valuesGridView值的数组。

这是我的GridView代码:

        int index = 0;
        while (rs.next()) {
            value.add("ID :" + rs.getString(1) + "  Nombre:" + rs.getString(3));
            list2.add(values.get(index));
            index++;
            Log.w("query result: ", rs.getString(1));
        }
        ArrayAdapter adapter = new ArrayAdapter(papeleta_act.this, R.layout.list_item, list2);
        grid.setAdapter(adapter);
        grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                addItems(position);

            }
        });
    } catch (Exception e) {
        Log.w("My error;", e);
    }
}

我很感激如何处理这个问题。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

为简单起见,我们假设GridView中的所有项目都属于单一类型,我们称之为A。在这种情况下,ArrayList包含A类型的项目。

A简单的解决方案是让listitem包含一个包含A的类型的对象,并且在点击的时间内还有一个计数器。可能的实施是:

public class B {
    public A mA;
    public int times_clicked;
}

如何显示ListView中点击的时间取决于您的布局实施。 ArrayAdapter的默认行为是检查给定布局的根元素是否为TextView,然后将其文本设置为项目的toString()函数的结果它正在显示,因此您可以将此方法添加到类B

public String toString(){
     if(times_clicked == 1 && A != null)
         return A.toString();
     else
         return "item_clicked ("+times_clicked+")";
}