شرطی برای عدم تکرار یک نام در contact در موقع اضافه کردن یا ویرایش کردن

پرسیده شده
فعالیت 1328 روز پیش
دیده شده 659 بار
1

سلام استاد و دوستان عزیز.

چجور میشه این شرط رو هنگام addیا edit کردن یه contact بررسی کرد که اگه اون نام قبلا توی لیست وجود داشته باشه ، دیگه اجازه ی ثبت نده و ارور نمایش بده؟

مثلا من الان یک contact رو اضافه کردم و دوباره اومدم همون رو نوشتم و اد کردم و اضافه کرد. که این عملا اتفاق جالبی نیست و یا اومدم یک contact رو ویرایش کردم و یکی نام از کانتکت ها رو اونجا نوشتم که از قبل بود ولی ثبت شد و اروری مبنی بر تکراری بودن کانتکت نداد.

اگه متوجه سوالم نشدید بگید تا بیشتر توضیح بدم. ولی فکر کنم واضح پرسیده باشم. 

در پایین عکس زمانی که یک نام رو دوبار add کردم.

فایل پیوست

احمد اسماعیلی
احمد اسماعیلی

31 اردیبهشت 99

2
حذف شده

این الگوریتم پیاده سازی شده برای اینکه مخاطب تکراری ادد نشه 

خدمت دوستانی که اینده ممکن هست به چنین مشکلی برخورد کنند.

addNewContactBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i <list.size() ; i++) {
                    if(list.get(i).equalsIgnoreCase(fullNameEt.getText().toString())){
                        Toast.makeText(v.getContext(),"این کاربر وجود دارد",Toast.LENGTH_SHORT).show();
                        return;
                    }
                    else {
                        if (fullNameEt.length() > 0) {
                            if (editingItemPosition > -1) {
                                adapter.opdatecontact(fullNameEt.getText().toString(),editingItemPosition);
                                editingItemPosition = -1;
                                addNewContactBtn.setImageResource(R.drawable.ic_add_white_24dp);
                            } else {
                                adapter.addNewContact(fullNameEt.getText().toString());
                                recyclerView.scrollToPosition(0);
                            }
                            fullNameEt.setText("");
                        }
                    }
                }



            }
        });

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

1 خرداد 99

حذف شده
لایک داری پوریا :)
احمد اسماعیلی

1 خرداد 99

0
حذف شده

اینم عکس زمانی که یکی از کانکت ها رو ویرایش کردم و نام یکی از کانکت ها رو به جاش گذاشتم.

فایل پیوست

احمد اسماعیلی

توسط

احمد اسماعیلی

31 اردیبهشت 99

3
حذف شده

سلام هم دوره ای عزیز 

حقیقت الگوریتم های زیادی میشه در نظر گرفت برای این کار 

و‌ از اونجایی که من دوست داشتم کار شما سریع تر راه بیفته به ذهنم رسید ساده ترین روش رو بگم 

(البته چون با گوشی در حال حاظر هستم و کمی نوشتن کد سخت هست به همین دلیل اگر که متوجه نشدین حتما اعلام کنین من کد رو می‌نویسم واستون)

اما ساده ترین روش ممکن چی هست؟

این هست که شما بیاین با ی حلقه فور یا وایل( هر کدام که راحت تر هستید) 

داخل لیست کانتکت هاتون پیمایش کنین یعنی شرط حلقه این باشه که بنویسید listContact.size(); و سپس در بدنه حلقه شرطی بنویسید که اگر listContact.get(i).equalsIgnoreCase(Name Daryafti بود (یعنی اگر آیتم i ام ما برابر بود با رشته دریافتی (که میتونین برای این کار از متدی در آداپتور استفاده کنین که رشته دریافتی رو از متد مربوطه دریافت نمایید) پس بیا و مقدار رو اضافه نکن و بنویسید else (در غیر این صورت ) بیا و .add کن روی لیست مربوطه در آداپتور 

اگر منظور من رو متوجه نشدین حتما اعلام کنین تا به صورت کد واستون توضیح مفصل تری بدم 

موفق و پیروز باشین 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

31 اردیبهشت 99

حذف شده
راستی متد equalsIgnoreCase برای مقایسه بین دو رشته هست که حساس به حروف بزرگ و کوچک هست ش اگر بخاین حساس نباشه فقط کافیه بنویسین equals ، این که مقدار دریافتی متدی که ذکر کردم از کجا بیاریم با اینترفیسی میتونین این کار رو انجام بدین
پوریا شفیعی

31 اردیبهشت 99

حذف شده
البته روش بهتر این هست که لیست رو در اکتیویتی یا فرگمنتتون دریافت کرده و اونجا با حلقه پیمایش کنین ، چرا که در آداپتور بهتر هستش که از کد های زیاد پرهیز کنیم .
پوریا شفیعی

31 اردیبهشت 99

حذف شده
سلام پوریا جان وقتت بخیر. راستش چون من تازه کارم توی اپلیکیشن و میخوام تازه یاد بگیرم. این توضیحاتتون یه کم برام سخته و راستش متوجه نشدم کلا چی گفتید.اگه دقیقا روی مثال استاد برام توضیح بدید ممنون میشم. و اینکه من صرفا کد های استاد رو تمرین میکنم و به زور میفهمم چی شد اونم با 10 بار نگاه کردن. یه کم سطح آموزش بالاست تو بعضی جاها.
احمد اسماعیلی

31 اردیبهشت 99

حذف شده
پوریا برعکس گفتی فکر کنم , متد equalsIgnoreCase به کوچک و بزرگ حساس نیست و متد equals هست که حساسه .
Hamidreza Kermani

19 شهریور 99

0
حذف شده

سلام

پوریا تو این کدی که نوشتی بهتر نیست که فقط اون قسمت که داره چک میکنه ایتم تکراریو تو حلقه بزاریم..؟؟

 

چون الان کد اد کردن و اپدیت کردن ایتم هم تو حلقه گزاشتیم و این مشکل ساز میشه...درواقع تو حلقه گیر میکنه...

تست هم کنی اپ فریز میشه و در اخر فورس کلوز میده...

اگه اون قطعه کد رو بیاریم بیرون از حلقه اکی میشه...

 

  addNewContactBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int i = 0; i <list.size() ; i++) {
                if(list.get(i).equalsIgnoreCase(fullNameEt.getText().toString())){
                    Toast.makeText(v.getContext(),"این کاربر وجود دارد",Toast.LENGTH_SHORT).show();
                }
            }

            if (fullNameEt.length() > 0) {
                if (editingItemPosition > -1) {
                    adapter.opdatecontact(fullNameEt.getText().toString(),editingItemPosition);
                    editingItemPosition = -1;
                    addNewContactBtn.setImageResource(R.drawable.ic_add_white_24dp);
                } else {
                    adapter.addNewContact(fullNameEt.getText().toString());
                    recyclerView.scrollToPosition(0);
                }
                fullNameEt.setText("");
            }

        }
    });

 

فایل پیوست

Hamidreza Kermani

توسط

Hamidreza Kermani

19 شهریور 99

حذف شده
البته اینجا سوتی بدی دادم :) میایم یه متد میسازیم که نوعش بولینه...اگر تکراری بود true و اگر نبود false برمیگردونه...از این مقدار استفاده میکنیم و به عنوان شرط در نظر میگیرم...اگر false بود که بیاد کارای مربوط به ادد کردن و اپدیت کردن رو انجام بده در غیر این صورت بیاد به پیام نشون بده که تکراریه ایتم...
Hamidreza Kermani

19 شهریور 99