Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在从RecyclerView中删除行时消除索引越界异常错误_Android_Android Recyclerview - Fatal编程技术网

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;
}