حذف کردن ایتم ها با استفاده از dialog

پرسیده شده
فعالیت 975 روز پیش
دیده شده 439 بار
0

با سلام 

من برای کسب تجربه بیشتر و درک بهتر 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 کمک بگیرم اما نتوستم چون اشنایی کامل نداشتم با مبحثش ، اگر امکانش هست بهم در این زمینه کمک کنید.

 

فایل پیوست

دانیال مهاجر
دانیال مهاجر

5 شهریور 00

0
حذف شده

سلام وقت بخیر

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

فایل پیوست

میلاد عزیززاده گلنگشی

توسط

میلاد عزیززاده گلنگشی

6 شهریور 00

حذف شده
اگه اینجوری باشه یعنی باید به جز متود های contactadapter متود های dialogfragment هم که میشه همون اینترفیس در activitymain ایمپلمنت بشن؟
دانیال مهاجر

6 شهریور 00

حذف شده
بله باید implement بشن دقت کنید component اصلی توی پروژه شما فعلا MainActivity هست بنابراین هر عملی رو باید بهش خبر بدین تا اون تصمیم بگیره چیکار کنه
حذف شده
ممنون از کمکت میلاد جان تونستم درستش کنم الان داره درست کار میکنه
دانیال مهاجر

6 شهریور 00

حذف شده
ممنون از کمکت میلاد جان تونستم درستش کنم الان داره درست کار میکنه
دانیال مهاجر

6 شهریور 00

حذف شده
ممنون از کمکت میلاد جان تونستم درستش کنم الان داره درست کار میکنه
دانیال مهاجر

6 شهریور 00