Использование позиции в onBindViewHolder - PullRequest
0 голосов
/ 23 апреля 2020
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();

Как мне преодолеть эту проблему ??

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...