ViewPager2 как получить данные из отображаемого объекта - PullRequest
0 голосов
/ 20 сентября 2019

У меня проблема с обновлением правильного объекта ученика в моей базе данных из viewpager2.Мой viewpager2 имеет возможность отображать студентов в алфавитном порядке или по классам, студенты не отображаются в том же порядке, в котором они находятся в базе данных.

Я попытался получить идентификатор из @Override onBindViewHolder и присвоить результатам глобальное значение int в адаптере, но это число не соответствует идентификатору базы данных студента.

private int mDbId;

//Constructor
ViewPagerAdapter(Context context, List<StudentEntity data) {
    this.mContext = context;
    this.mInflater = LayoutInflater.from(context);
    this.mData = data;

}

@Override 
public void onBindViewHolder(ViewHolder holder, int position) {
    StudentEntity student = mdata.get(position);
    mDBId = student.getId();
    mFirstName = student.getFirstName();
    mLastName = student.getLastName();
    mGrade = student.getGrade();

    holder.inputFirstName.setText(mFirstName);
    ...
}

public class ViewHolder extends RecyclerView.ViewHolder {
    private Button btnSave;
    private TextInputEditText editFirstName;
    ...

    ViewHolder(View itemView) {
        super(itemView);

        editFirst = itemView.findViewById(R.id.edit_text_first_name);
        ...

        btnSave.setOnClickListener(view -> {
            Intent saveIntent = new Intent();

            // the mDbId is where I'm having issues. 
            saveIntent.putExtra("EXTRA_DB_id", mDbId;
            saveIntent.putExtra("EXTRA_FIRST_NAME", editFirstName.getText().toString();     

            ((Activity mContext).setResult(RESULT_OK, saveIntent);

            // .finish() works as intented
            ((Activity mContext).finish();

        }
    }
}

1 Ответ

1 голос
/ 20 сентября 2019

Ваш btnSave clickListener должен быть в onBindViewHolder.

@Override 
public void onBindViewHolder(ViewHolder holder, int position) {
    StudentEntity student = mdata.get(holder.getAdapterPosition());
    int studentId = student.getId();
    mFirstName = student.getFirstName();
    mLastName = student.getLastName();
    mGrade = student.getGrade();

    holder.inputFirstName.setText(mFirstName);
    btnSave.setOnClickListener(view -> {
        Intent saveIntent = new Intent();
        saveIntent.putExtra("EXTRA_DB_id", studentId);
        saveIntent.putExtra("EXTRA_FIRST_NAME", editFirstName.getText().toString();     
        ((Activity mContext).setResult(RESULT_OK, saveIntent);
        ((Activity mContext).finish();

    }
}
...