2017-07-15 21 views
0

ランダムに行を削除した後で配列のインデックスに問題があるように見えるため、エラーがどのように発生しているのか理解しています。それを修正するために周りに移動します。任意の助けに感謝されます。ここでRecyclerViewから行を削除する際にIndex Out of Bounds Exceptionエラーを取り除く方法

は私のコード

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()); 

    } 
    } 

そして、ここではエラーあなたはこのようないくつかのオブジェクトのいずれかのリストを使用していないのはなぜ

D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.admin.import2, PID: 6891 
        java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 
         at java.util.ArrayList.get(ArrayList.java:411) 
         at com.example.admin.import2.DataAdapter.onBindViewHolder(DataAdapter.java:47) 
         at com.example.admin.import2.DataAdapter.onBindViewHolder(DataAdapter.java:27) 
         at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6279) 
         at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6312) 
         at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5258) 
         at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5521) 
         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5363) 
         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5359) 
         at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2141) 
         at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1525) 
         at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488) 
         at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585) 
         at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3506) 
         at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2969) 
         at android.view.View.measure(View.java:19734) 
         at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
         at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
         at android.view.View.measure(View.java:19734) 
         at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1658) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
         at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
         at com.android.internal.policy.DecorView.onMeasure(DecorView.java:687) 
         at android.view.View.measure(View.java:19734) 
         at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2271) 
         at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1358) 
         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1607) 
         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246) 
         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301) 
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
E/AndroidRuntime:  at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
         at android.view.Choreographer.doFrame(Choreographer.java:619) 
         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
         at android.os.Handler.handleCallback(Handler.java:751) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6077) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
E/DynamiteModule: Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor" on path: DexPathList[[zip file "/data/app/com.example.admin.import2-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.admin.import2-2/lib/x86, /system/lib, /vendor/lib]] 
Application terminated. 

答えて

0

あるのですか?

class Data{ 
    String name, message; 
} 

プラス

public DataAdapter(List<Data> data) { 
    this.data = data; 
} 

二つのリストを使用することにより除去して、両方から取得中に、あなただけのmessageKeys、唯一そのほか

に後でエラーを引き起こす、一つのサイズを使用しています質問には定義されていませんので、デバッグしてください

Firebaseを使用する場合は、FirebaseUIにチャンスを

関連する問題