Я могу получить доступ к оценкам, но хочу хранить их только в соответствующих местах (это означает, что каждый ученик получает свои оценки, а не чьи-либо)
Так выглядит мой просмотр в Recycler
Структура данных Firebase
Я дошел до того, что данные собираются из одного редактируемого текста, но не могу добраться до нужного узла Student,
Внутри метода onBindViewHolder
myViewHolder.btnUpdateMarks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final View v = view;
Result r = new Result();
r.setMarks_scored(myViewHolder.etEnterMarks.getText().toString());
String text = myViewHolder.etEnterMarks.getText().toString();
myViewHolder.updateValue(text,r,v);
}
});
Функция UpdateValue
public void updateValue(String text, Result r, final View v){
final View view = v;
final Result result = r;
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
final DatabaseReference marksRef = firebaseDatabase.getReference().child("Batches").child("BATCH1");
marksRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot demo : dataSnapshot.getChildren()){
marksRef.child("Results").child("-LfB2Jz7vrbv0vMyYA02").setValue(result);
}
}
Жестко запрограммирован marksRef, что не должно быть так ... Я не могу найти никакого возможного путичтобы получить эти дочерние переменные внутри класса адаптера
Любой, у кого есть более сильное желание решить проблему, пожалуйста, помогите!Извините за плохое общение, пожалуйста, укажите, если чего-то не хватает
----- РЕДАКТИРОВАТЬ --------- Я решил проблему, используя строковый массив внутри моего класса активности и передав его вконструктор моего RecyclerViewAdapter. Проблема в том, что когда я что-то набираю в тексте редактирования 2-го или 3-го элемента, после нажатия кнопки обновления курсор автоматически переходит к тексту редактирования первого элемента. Это мой класс адаптера
public class MarksListAdapter extends RecyclerView.Adapter<MarksListAdapter.MyViewHolder> {
Context context;
ArrayList<Result> resultArrayList;
String[] firebaseChildValues = new String[2];
String student_uid;
public MarksListAdapter(Context c, ArrayList<Result> p, String[] child) {
context = c;
resultArrayList = p;
firebaseChildValues = child;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.marks_list, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {
myViewHolder.tvStudentName.setText(resultArrayList.get(i).getName());
myViewHolder.tvOutOf_List.setText(" / " + resultArrayList.get(i).getTotal_marks());
myViewHolder.etEnterMarks.setText(resultArrayList.get(i).getMarks_scored());
myViewHolder.tvStudentUid.setText(resultArrayList.get(i).getStudent_uid());
myViewHolder.btnUpdateMarks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final View v = view;
student_uid = myViewHolder.tvStudentUid.getText().toString();
Result r = new Result();
r.setMarks_scored(myViewHolder.etEnterMarks.getText().toString());
String text = myViewHolder.etEnterMarks.getText().toString();
myViewHolder.updateValue(text, r, v, firebaseChildValues, student_uid);
}
});
}
@Override
public int getItemCount() {
return resultArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvStudentName, tvOutOf_List, tvStudentUid;
EditText etEnterMarks;
Button btnUpdateMarks;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tvStudentName = (TextView) itemView.findViewById(R.id.tvStudentName);
etEnterMarks = (EditText) itemView.findViewById(R.id.etEnterMarks);
tvOutOf_List = (TextView) itemView.findViewById(R.id.tvOutOf_List);
tvStudentUid = (TextView) itemView.findViewById(R.id.tvStudentUid);
btnUpdateMarks = (Button) itemView.findViewById(R.id.btnUpdateMarks);
}
public void updateValue(String text, Result r, final View v, String[] child, String suid) {
final View view = v;
final Result result = r;
String[] firebaseChildValues = child;
String resultValue = text;
String studentUid = suid;
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
final DatabaseReference marksRef = firebaseDatabase.getReference().child("Batches").child(firebaseChildValues[0]).child(studentUid).child("Results").child(firebaseChildValues[1]);
marksRef.child("marks_scored").setValue(resultValue).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("TAG_MARKS", marksRef.toString());
}
}
});
}
}
}