Android 如何在从RecyclerView中删除行时消除索引越界异常错误
我理解错误是如何产生的,因为在随机删除一行之后,数组索引似乎有问题,所以如何解决它。如果您有任何帮助,我们将不胜感激 这是我的密码Android 如何在从RecyclerView中删除行时消除索引越界异常错误,android,android-recyclerview,Android,Android Recyclerview,我理解错误是如何产生的,因为在随机删除一行之后,数组索引似乎有问题,所以如何解决它。如果您有任何帮助,我们将不胜感激 这是我的密码 public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { private ArrayList<String> reminderMessage; private ArrayList<String> receiverName; pu
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<String> reminderMessage;
private ArrayList<String> receiverName;
public DataAdapter(ArrayList<String> reminderMessage,ArrayList<String> receiverName) {
this.reminderMessage = reminderMessage;
this.receiverName = receiverName;
}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cards_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final DataAdapter.ViewHolder viewHolder, final int i) {
viewHolder.reminderText.setText(reminderMessage.get(i));
viewHolder.receiverName.setText(receiverName.get(i));
viewHolder.button_reject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rejectItem(viewHolder.getAdapterPosition());
}
});
}
@Override
public int getItemCount() {
return reminderMessage.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView reminderText;
private TextView receiverName;
Button button_reject;
public ViewHolder(View view) {
super(view);
reminderText = (TextView)view.findViewById(R.id.remindertext);
receiverName = (TextView)view.findViewById(R.id.receiverName);
button_reject=(Button)view.findViewById(R.id.button_reject);
}
}
private void rejectItem(int position) {
DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference();
try {
mdatabase.child("reminders").child(messageKeys.get(position)).child("status").setValue("reject");
Log.d("in the loop","writing");
} catch (Exception e) {
e.printStackTrace();
}
reminderMessage.remove(position);
receiverName.remove(position);
messageKeys.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, reminderMessage.size());
}
}
你为什么不用一张这样的对象列表呢
class Data{
String name, message;
}
加上
公共数据适配器(列表数据){
这个数据=数据;
}
通过使用两个列表,您只使用了一个列表的大小,而从两个列表中删除和获取,这只会在以后导致错误
除此之外,messageKeys
在问题中没有定义,所以也请调试它
如果你想使用Firebase,给你一个机会
class Data{
String name, message;
}
public DataAdapter(List<Data> data) {
this.data = data;
}