protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<AdminOrders> options=
new FirebaseRecyclerOptions.Builder<AdminOrders>()
.setQuery(ordersRef,AdminOrders.class)
.build();
FirebaseRecyclerAdapter<AdminOrders,AdminOrdersViewHolder> adapter=
new FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull AdminOrdersViewHolder holder, final int position, @NonNull final AdminOrders model) {
holder.userName.setText("Name: " + model.getName());
holder.userPhoneNumber.setText("Phone Number: " + model.getPhone());
holder.userShippingAddress.setText("Shipping Address: " + model.getAddress() + ", " + model.getCity() + ", " + model.getState() + ", " + model.getPin());
holder.userTotalPrice.setText("Total Amount: Rs. " + model.getTotalAmount() + ".00");
holder.userDateTime.setText("Order Date & Time: " + model.getDate() + " @ " + model.getTime());
holder.showOrdersBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String UID=getRef(position).getKey();
Toast.makeText(AdminNewOrdersActivity.this, "Position: " + position, Toast.LENGTH_SHORT).show();
Intent intent=new Intent(AdminNewOrdersActivity.this,AdminUserProductsActivity.class);
intent.putExtra("uid",UID);
startActivity(intent);
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CharSequence option[]=new CharSequence[]{
"Yes",
"No"
};
AlertDialog.Builder builder=new AlertDialog.Builder(AdminNewOrdersActivity.this);
builder.setTitle("Has this order been shipped?");
builder.setItems(option, new DialogInterface.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
String UID=getRef(position).getKey();
removeOrder(uid);
}
else{
finish();
}
}
});
builder.show();
}
});
}
@NonNull
@Override
public AdminOrdersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.orders_layout,parent,false);
return new AdminOrdersViewHolder(view);
}
};
ordersList.setAdapter(adapter);
adapter.startListening();
}
Приведенный выше код предназначен для изображения ниже:
введите описание изображения здесь
Значение переменной "position" равно 0 для первого элемент (с номером телефона 1122), 1 для второго элемента (с номером телефона 1133) и 2 для третьего элемента (с номером телефона 1144).
Когда пользователь щелкает второй элемент (с номером телефона 1133) ) и затем нажимает «Да», этот элемент удаляется, и первый элемент и третий элемент остаются, как показано на рисунке ниже (обратите внимание, что третий элемент теперь выдвинулся, чтобы стать вторым элементом):
введите описание изображения здесь
Пока все хорошо ... проблема накапливается здесь. Теперь, когда я пытаюсь удалить второй элемент (с номером телефона 1144, который раньше был третьим элементом, но теперь поднялся, чтобы стать вторым элементом после удаления второго элемента), приложение вылетает. Я думаю, это связано со значением переменной "position", поскольку Logcat указывает на эту строку.
String UID=getRef(position).getKey();
Как мне преодолеть эту проблему ??
Спасибо