如果多次单击一个选项,有没有办法只为 setOnItemClickListener 获取单个值而不是获取多个值?
Posted
技术标签:
【中文标题】如果多次单击一个选项,有没有办法只为 setOnItemClickListener 获取单个值而不是获取多个值?【英文标题】:Is there a way for only getting a single value for a setOnItemClickListener instead of getting multiple values if an option is clicked multiple times? 【发布时间】:2018-08-22 05:38:56 【问题描述】:我有一个清单,我想将清单中所有已检查的项目发送到 Firebase 数据库。我有它发送到数据库,但有一个问题。如果该项目被选中、取消选中并再次选中,该值将被发送两次到数据库。
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i,
long l)
String selectedItem = ((TextView) view).getText().toString();
selectedItems.add(selectedItem);
if (unselectedItems.contains(selectedItem))
unselectedItems.remove(selectedItem);
);
public void showSelectedItems(View view)
FirebaseUser user = mAuth.getCurrentUser();
String presentStudents = "";
for (int i = 0; i < selectedItems.size(); i++)
dbPresentRef.child(selectedItems.get(i)).push().setValue("Present");
presentStudents += "-" + selectedItems.get(i) + "\n";
【问题讨论】:
最好的方法是创建一个arrayList和一个布尔值isSelected,所以当你选择它们时你会将数据添加到arraylist,如果你取消选择它们,你只做arraylist。 remove ,如果选择它,只需执行 arraylist.add 【参考方案1】:在您的selectedItems
列表中添加selectedItem
之前,只需添加一个if
条件,如下所示。
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i,
long l)
String selectedItem = ((TextView) view).getText().toString();
if(!selectedItems.contains(selectedItem))
selectedItems.add(selectedItem);
if (unselectedItems.contains(selectedItem))
unselectedItems.remove(selectedItem);
);
public void showSelectedItems(View view)
FirebaseUser user = mAuth.getCurrentUser();
String presentStudents = "";
for (int i = 0; i < selectedItems.size(); i++)
dbPresentRef.child(selectedItems.get(i)).push().setValue("Present");
presentStudents += "-" + selectedItems.get(i) + "\n";
【讨论】:
以上是关于如果多次单击一个选项,有没有办法只为 setOnItemClickListener 获取单个值而不是获取多个值?的主要内容,如果未能解决你的问题,请参考以下文章