私はリストビューを設定するためのUserクラスを持っています。これは私がこのリストビューから取得した値で作業したいまで、すべてが...良い作品ユーザーノードFirebaseのリストビューの位置を取得する
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;
}
私はリストビューの要素を選択することはできますが、常に最初のものを取得します。どんな助けもありがとう。
更新:ユーザーが次のコード行を使用する必要がクリックした上で、リストビューの要素の値を取得するには
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) {
}
});
私はこれを "OnLongClickListener"に入れなければなりませんか?そして、私は文字列sで何ができますか? –
あなたが望むものすべて。これは、ユーザーが長いクリックをしたListView要素のString型の値を表します。 logcatに対応する項目の値を記録しますか? –
私は参照してください。しかし、リストビューの目的は、1人のユーザーを選択し、そのUid値をValueEventListenerに取り込み、idAdminToAddに格納することです。私の質問ではあまり明確ではないことを申し訳ありません。私が作ったコードでは、値は本当に2 Uidですが、私が選んだ要素は常に1つだけです。これを行う方が簡単な場合は、私は気にしません:admin_node.push()。setValue(s)。 –