Основная проблема в вашем коде состоит в том, что вы пытались вызвать arraylist в адаптере из действия. Вы не можете сделать это. Итак, вам нужно создать интерфейс, который будет обновлять список действий в действии при внесении изменений в представление переработчика.
Вот как этого добиться:
Сначала создайте интерфейс, подобный этому:
public interface RecyclerItemClick {
public void onItemClick(int position, String newValue);
}
Это будет вызвано, когда пользователь вносит изменения в текст редактирования.
добавьте implements RecyclerItemClick
в свою деятельность и переопределите функцию onItemClick()
.
Объявите представление рециркулятора и адаптер вне функции базы данных, передайте объект RecyclerItemClick в адаптер. Затем позвоните customAdapter.notifyDataSetChanged();
после получения данных из базы данных.
customAdapter = new UpdateStudentRecyclerAdapter(AddStudent.this,editModelArrayList, this);
recyclerView.setAdapter(customAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
StudentdatabaseReference.child(GroupId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
editModelArrayList = new ArrayList<AddStudentModel>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
AddStudentModel value = dataSnapshot1.getValue(AddStudentModel.class);
AddStudentModel fire = new AddStudentModel();
String name = value.getStudentName();
String id = value.getStudentID();
fire.setStudentName(name);
fire.setStudentID(id);
editModelArrayList.add(fire);
}
customAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w("Hello", "Failed to read value.", error.toException());
}
});
Затем в адаптере,
public class UpdateStudentRecyclerAdapter extends
RecyclerView.Adapter<UpdateStudentRecyclerAdapter.MyViewHolder> {
private LayoutInflater inflater;
RecyclerItemClick itemClick;
public static ArrayList<AddStudentModel> editModelArrayList;
public UpdateStudentRecyclerAdapter(Context ctx, ArrayList<AddStudentModel>
editModelArrayList,RecyclerItemClick itemClick){
inflater = LayoutInflater.from(ctx);
this.editModelArrayList = editModelArrayList;
this.itemClick = itemClick;
}
@Override
public UpdateStudentRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.add_student_rv_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final UpdateStudentRecyclerAdapter.MyViewHolder holder, final int position) {
AddStudentModel mylist = editModelArrayList.get(position);
holder.textView.setText(mylist.getStudentID());
holder.editText.setText(mylist.getStudentName());
}
@Override
public int getItemCount() {
return editModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
protected EditText editText;
protected TextView textView;
public MyViewHolder(View itemView) {
super(itemView);
editText = (EditText) itemView.findViewById(R.id.editid);
textView = (TextView) itemView.findViewById(R.id.id_view);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
itemClick.onItemClick(getAdapterPosition(), editText.getText().toString());
}
});
}
}
Теперь, когда в editText вносится изменение, вызывается функция интерфейса в действии. Теперь в функции overide onItemClick () обновите список рассылки следующим образом:
@override
public void onItemClick(int position, String newValue){
editModelArrayList.get(position).setEditTextValue(newValue); // i assume, this is where u store updated value.
}
Теперь на update.setOnClickListener ():
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < editModelArrayList.size(); i++){
AddStudentModel mylist = editModelArrayList.get(i);
String ky =mylist.getStudentID();
StudentdatabaseReference.child(GroupId).child(ky).child("name").setValue(mylist.getEditTextValue());
} }});
Я думаю, это будет работать. Попробуйте.