В настоящее время я работаю над приложением для чата. Моя цель - получить конкретный идентификатор (отмеченный на картинке) при нажатии на это имя пользователя и отобразить его в logcat.
На этих изображениях показаны значения, которые необходимо получить.

Вот класс ViewHolder и класс адаптера для ресайклера View.
public class UsersAdapterClass extends RecyclerView.Adapter<UsersAdapterClass.UsersViewHolder>{
Context context;
List<Users> usersList;
FirebaseDatabase firebaseDatabase;
DatabaseReference db;
public UsersAdapterClass(Context context, List<Users> usersList) {
this.context = context;
this.usersList = usersList;
}
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.users_single_layout,parent,false);
UsersViewHolder usersViewHolder = new UsersViewHolder(view);
return usersViewHolder;
}
@Override
public void onBindViewHolder(UsersViewHolder holder, int position) {
Users users = usersList.get(position);
holder.name.setText(users.getName());
holder.status.setText(users.getStatus());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firebaseDatabase= FirebaseDatabase.getInstance();
db = firebaseDatabase.getInstance().getReference("Users");
final String firebaseId2 = db.push().getKey();
Log.d("User ID",firebaseId2);
}
});
}
@Override
public int getItemCount() {
return usersList.size();
}
public class UsersViewHolder extends RecyclerView.ViewHolder{
CircleImageView image;
TextView name,status;
public UsersViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.circleImageView);
name = itemView.findViewById(R.id.users_displayname);
status = itemView.findViewById(R.id.users_status);
}
public CircleImageView getImage() {
return image;
}
}
}
Также это код для класса, который содержит вид ресайклера.
public class UsersMainActivity extends AppCompatActivity {
private Toolbar mToolbar;
RecyclerView mRecyclerView;
UsersAdapterClass adapter;
private DatabaseReference mUserDatabase;
List<Users> usersList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users_main);
mToolbar = findViewById(R.id.allusers_appbar);
mRecyclerView = findViewById(R.id.allusers_recyclerView);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("All users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
usersList = new ArrayList<>();
DatabaseReference dbUsers = FirebaseDatabase.getInstance().getReference("Users");
dbUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
for(DataSnapshot userSnapshot:dataSnapshot.getChildren())
{
Users u = userSnapshot.getValue(Users.class);
usersList.add(u);
}
adapter = new UsersAdapterClass(UsersMainActivity.this,usersList);
mRecyclerView.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Все пользователи отображаются в представлении ресайклера, я хочу получить идентификатор пользователя, на которого я нажимаю. например: я нажимаю на пользователя 6. Я хочу получить его соответствующий uid.
В зависимости от структуры вашей базы данных идентификаторы пользователей станут ключевыми при просмотре полученного снимка. Чтобы получить ключи, просто вызовите getKey() на вашем зацикленном снимке данных. Вы можете сделать это, добавив приведенный ниже код между вашим циклом и записав его в свой Logcat ...
String userIds = userSnapshot.getKey(); //Get keys
Log.d("USERID KEYS", userIds) //Log to logcat
Обновлено: Создайте добытчик и сеттер для идентификатора пользователя в вашей модели / POJO User. Затем передайте userIds сеттеру. Например u.setUserId(userIds). Теперь в вашем адаптере просто вставьте userid в свой onclick().
...
@Override
public void onClick(View v) {
Log.d("User ID",user.getUserId());
}
...
Спасибо за ответ. Поскольку все пользователи отображаются в представлении ресайклера, я хочу получить идентификатор пользователя, на которого я нажимаю. например: я нажимаю на пользователя 6. Я хочу получить его соответствующий uid. Заранее спасибо.
Я немного изменил свой ответ. Дай мне знать, если тебе все еще понадобится помощь.
Спасибо друг. Это было именно то, что я искал.
Пожалуйста. Проголосуйте и примите это как правильный ответ, если он решил вашу проблему. Ваше здоровье!
Также хотел немного больше помощи. Я хочу получить изображения, хранящиеся в базе данных, в представлении ресайклера. Как это сделать???
Вы должны сначала принять это как правильный ответ, а затем создать еще одну публикацию о новой проблеме.
Внутри вашего onBindViewHolder вы можете хранить идентификаторы в строке таким образом
последняя строка userIds = getRef (позиция) .getKey ();
Какую ошибку вы получали?