【问题标题】: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?如果多次单击一个选项,有没有办法只为 setOnItemClickListener 获取单个值而不是获取多个值?
【发布时间】: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

标签: android listview firebase-realtime-database onitemclick


【解决方案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";
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2014-12-23
    • 2020-06-18
    相关资源
    最近更新 更多