数组列表检查值是否存在,如果存在则将 1 添加到字符串
Array list checking if value exists, if exists add 1 to string
假设我有一个名为 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();
}
}
position
是 GridView
的索引,values
是 GridView
的值的数组。
这是我的 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);
}
}
如果能知道如何解决这个问题,我将不胜感激。
提前致谢!
为了简单起见,我们假设 GridView
中的所有项目都是单一类型,我们称之为 A
。在这种情况下,ArrayList
包含 A
.
类型的项目
A
简单的解决方案是让 listitem
包含包装 A
类型的对象,并且还有一个计数器,用于计算点击次数。可能的实现是:
public class B {
public A mA;
public int times_clicked;
}
如何在 ListView
中显示点击次数取决于您对布局的实现。 ArrayAdapter
的默认行为是检查给定布局的根元素是否为 TextView
,然后将其文本设置为该项目的 toString()
函数的结果它正在显示,因此您可以将此方法添加到 class B
:
public String toString(){
if(times_clicked == 1 && A != null)
return A.toString();
else
return "item_clicked ("+times_clicked+")";
}
假设我有一个名为 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();
}
}
position
是 GridView
的索引,values
是 GridView
的值的数组。
这是我的 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);
}
}
如果能知道如何解决这个问题,我将不胜感激。 提前致谢!
为了简单起见,我们假设 GridView
中的所有项目都是单一类型,我们称之为 A
。在这种情况下,ArrayList
包含 A
.
A
简单的解决方案是让 listitem
包含包装 A
类型的对象,并且还有一个计数器,用于计算点击次数。可能的实现是:
public class B {
public A mA;
public int times_clicked;
}
如何在 ListView
中显示点击次数取决于您对布局的实现。 ArrayAdapter
的默认行为是检查给定布局的根元素是否为 TextView
,然后将其文本设置为该项目的 toString()
函数的结果它正在显示,因此您可以将此方法添加到 class B
:
public String toString(){
if(times_clicked == 1 && A != null)
return A.toString();
else
return "item_clicked ("+times_clicked+")";
}