2

我檢索firebase中的數據,如果用戶點擊回收站視圖中的項目,但是當我在回收站查看2或3個項目時,我想要刪除它,我正在像這樣獲取堆棧跟蹤。有時我點擊它的項目是錯誤的。如何解決它?使用OnClick刪除recyclerview中的項目。 Firebase android

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.IndexOutOfBoundsException: Invalid index 3, size is 2 
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
at java.util.ArrayList.get(ArrayList.java:304) 
at com.firebase.ui.database.FirebaseArray.getItem(FirebaseArray.java:52) 
at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:150) 
at com.myapp.maecea.ipon4.Expenses$3$1$2.onClick(Expenses.java:274) 
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4745) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 

這是我的代碼:

adapter = new FirebaseRecyclerAdapter < ExpenseData, myViewHolder > (
    ExpenseData.class, R.layout.listitem, myViewHolder.class, mRef.orderByChild("date").equalTo(date)) { 

    @Override 
    protected void populateViewHolder(final myViewHolder viewHolder, ExpenseData model, final int position) { 
     viewHolder.DateText.setText(model.getDate()); 
     viewHolder.ExpenseTitleText.setText(model.getExpensetitle()); 
     viewHolder.AmountText.setText(String.valueOf(String.format("%.2f", model.getAmount()))); 

     viewHolder.mView.setOnClickListener(new View.OnClickListener() {@ 
      Override 
      public void onClick(final View v) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(Expenses.this); 
       builder.setMessage("Gusto mo ba talaga burahin ito, katulad ng pagkalimot niya sayo?").setCancelable(false) 
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          int selectedItems = position; 
          for (int i = selectedItems; i >= 1; i++) { 
           adapter.getRef(i).removeValue(); 
           adapter.notifyItemRemoved(i); 
          } 
         } 
        }) 
        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 
       AlertDialog dialog = builder.create(); 
       dialog.setTitle("Expenses"); 
       dialog.show(); 
      } 
     }); 
    } 
};  

recyclerView.setAdapter(adapter); 

回答

0

IndexOutOfBoundsException異常,因爲你增加索引值。在for循環中將i++更改爲i--。這個代碼從選定的項目移除元件selectedItems> = 1

for (int i = selectedItems; i >= 1; i--) { 
    adapter.getRef(i).removeValue(); 
    adapter.notifyItemRemoved(i); 
} 

如果要刪除只有一個項目(在循環視圖點擊項)指除去for循環簡單使用

adapter.getRef(i).removeValue(); 
adapter.notifyItemRemoved(i); 
+0

如果我把它放在我的代碼中我也得到indexOutOfBoundsException – Kmmp

+0

你有沒有解決方案呢?@Kmmp –

0

考慮使用viewHolder.getAdapterPosition()而不是position

相關問題