تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ دانیال
حذف کردن ایتم‌ها با استفاده از dialog
میلاد عزیززاده حل شده توسط میلاد عزیززاده

با سلام 

من برای کسب تجربه بیشتر و درک بهتر RecyclerView سعی کردم action حذف شدن ایتم‌ها رو با نشان دادن یک پیغام با استفاده از dialog جالبترش کنم تا جایی جلو رفتم که تونستم با متود onLongClick بر روی ایتم‌های ریسایکر ویو dialog رو نشان بدم بر روی صفحه :

کد‌های مربوط به ContactAdapter :

itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    itemEventListener.onLongItemClick(getAdapterPosition());
                    return false;
                }
            });
        }
    }
    public interface ItemEventListener{
        void onItemClick(String fullName, int position);
        void onLongItemClick(int position);
    }

کد‌های مربوط MainActivity :

    @Override
    public void onLongItemClick(int position) {
        editingItemPosition = position;
        MyDialog myDialog = new MyDialog();
        myDialog.setCancelable(false);
        myDialog.show(getSupportFragmentManager(),null);
    }

اما در قسمت پاک کردن ایتم مورد نظر پس از فشردن دکمه yes بر روی دیالوگ به مشکل بر خوردم چون نمیتونستم position ایتم رو در activiy دیالوگ دریافت کنم ، سعی کردم ContactsAdapter.ItemEventListener در DialogFragment ایمپلمنت کنم و اینترفس رو  یکبار دیگه کال کنم تا بتونم یک integeri رو به position ربط بدم :

   #editingItemPosition = -1 مقدار دهی شده در Dialogfragment
      @Override
    public void onLongItemClick(int position) {
        editingItemPosition = position;
    }

اما پس از اجرا Fatal Error گرفتم چون متودی که در contactAdapter به نام deleteContact تعریف کرده بودم در موقع کال شدن در قسمت onClickListener دکمه Yes در اکتیویتی DialogFragment مقدار 1- نشان میداد :

 

کد مربوط به متود deleteContact در کلاس ContactAdapter

    public void deleteContact(int position){
        contacts.remove(position);
        notifyItemRemoved(position);
    }

کد مربوط به onClickListenr دکمه yes در DialogFragment :

        okBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                adapter.deleteContact(editingItemPosition);
                dismiss();
            }
        });

حتی سعی کردم از intent کمک بگیرم اما نتوستم چون اشنایی کامل نداشتم با مبحثش ، اگر امکانش هست بهم در این زمینه کمک کنید.

 

سلام وقت بخیر

رویه کار به این صورت هست که کاربر با long click کردن روی هر آیتمی پوزیشن اونو به اکتویتی میفرستی و در یک Instance variable نگه داری میکنی و در همان زمان یک دیالوگ نمایش میدی خوب نیازی نیست دیالوگ با آداپتر در ارتباط باشه تو میای یک اینترفیس در دیالوگ تعریف میکنی برای باتن‌های ok و cancel و در صورتی که روی ok کلیک شد به اکتویتی اطلاع بده و اکتویتی که به آداپتر دسترسی داره با استفاده از یک متدی در آداپتر میاد اون آیتم رو از داخل خودش remove میکنه خوب پوزیشن هم در اکتویتی به صورت instance variable داری

بهترین پاسخ
میلاد عزیززاده ۰۶ شهریور ۱۴۰۰، ۰۵:۵۴