【发布时间】:2017-11-14 19:43:19
【问题描述】:
我有一个用于填充列表视图的用户类。这是我创建用户节点的方式
currentUser= FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference usersDatabase= FirebaseDatabase.getInstance().getReference("Users");
usersDatabase.keepSynced(true);
User users= new User(FirebaseAuth.getInstance().getCurrentUser().getDisplayName());
String key = currentUser;
usersDatabase.child(key).setValue(users);
一切正常...直到我想使用从此列表视图中检索到的值。我为listview的长点击项设置了一种获取值的方法,但它不起作用。
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
adminToAdd = new ArrayList<>();
if (checked) {
adminToAdd.add(uAdapter.getItem(position));
} else {
adminToAdd.remove(uAdapter.getItem(position));
}
uAdapter.notifyDataSetChanged();
int checkedItems = listView.getCheckedItemCount();
if (checkedItems==1){
mode.setTitle(String.valueOf(checkedItems) + getString(R.string.selected));
} else {
mode.setTitle(String.valueOf(checkedItems) + getString(R.string.more_selected));
}
}
});
uAdapter= new UsersAdapter(this, User.class, R.layout.one_user, FirebaseDatabase.getInstance().getReference("Users"));
listView.setAdapter(uAdapter);
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
selectedPosition = position;
final ListView list = (ListView) arg0;
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
list.setItemChecked(position, true);
return true;
}
});
我假设通过这段代码我可以为 adminToAdd ArrayList 的每个值占据位置。然后,我用它来设置另一个名为“Admins”的数据库子项。方式:
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
// TODO Auto-generated method stub
switch (menuItem.getItemId()) {
case R.id.menu_admin_add:
for (User newAdmin : adminToAdd) {
DatabaseReference admin_node= FirebaseDatabase.getInstance().getReference().getRoot().child("Admins");
admin_node.push().setValue(idAdminToAdd);
Toast.makeText(UsersList.this,getString(R.string.admin_added),Toast.LENGTH_LONG).show();
}
uAdapter.notifyDataSetChanged();
mode.finish();
}
return false;
}
没办法,我可以选择列表视图的任何元素,但我总是得到第一个。任何帮助将不胜感激。
更新:这是我用来获取 idAdminToAdd 值的监听器:
DatabaseReference adminDatabase = FirebaseDatabase.getInstance().getReference().getRoot().child("Users");
adminDatabase.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
idAdminToAdd = childSnapshot.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
【问题讨论】:
标签: java android listview firebase firebase-realtime-database