Во-первых, я бы переименовал ваш Users
класс в User
, поскольку он относится только к одному пользователю, а не к нескольким.
Далее, вместо того, чтобы называть ваш список Username
, что делает его похожим на class, я бы переименовал его в mUserList
, чтобы следовать соглашениям о присвоении имен.
Аналогичным образом, я бы переименовал chatActivity
в ChatActivity
, поскольку это имя класса, а не экземпляр.
Теперь к актуальной проблеме: вместо вызова mUserList.get(position)
из обработчика щелчков проще и менее подвержено ошибкам вызывать его в начале onBindViewHolder
и назначать его переменной final
, которая Затем вы используете для обновления всего остального.
public class User_Adapter extends RecyclerView.Adapter<User_Adapter.ViewHolder> {
private Context mContext;
private List<User> mUserList;
public User_Adapter(Context context) {
this.mContext = context;
this.mUserList = new ArrayList<>(); // create with empty user list
}
public User_Adapter(Context context, List<User> userList) {
this.mContext = context;
this.mUserList = userList;
}
@NonNull
@Override
public User_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item,parent,false);
return new User_Adapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull User_Adapter.ViewHolder holder, final int position) {
final User user = this.mUserList.get(position);
holder.mTxtViewUsername.setText(user.getUsername());
holder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, ChatActivity.class);
String userId = user.getId();
intent.putExtra("userId", userId);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mUserList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private mTxtViewUsername;
public ViewHolder(View v) {
super(v);
this.mTxtViewUsername = v.findViewById(R.id.username);
}
}
}