سلام استاد و دوستان عزیز.
چجور میشه این شرط رو هنگام addیا edit کردن یه contact بررسی کرد که اگه اون نام قبلا توی لیست وجود داشته باشه ، دیگه اجازه ی ثبت نده و ارور نمایش بده؟
مثلا من الان یک contact رو اضافه کردم و دوباره اومدم همون رو نوشتم و اد کردم و اضافه کرد. که این عملا اتفاق جالبی نیست و یا اومدم یک contact رو ویرایش کردم و یکی نام از کانتکت ها رو اونجا نوشتم که از قبل بود ولی ثبت شد و اروری مبنی بر تکراری بودن کانتکت نداد.
اگه متوجه سوالم نشدید بگید تا بیشتر توضیح بدم. ولی فکر کنم واضح پرسیده باشم.
در پایین عکس زمانی که یک نام رو دوبار add کردم.
این الگوریتم پیاده سازی شده برای اینکه مخاطب تکراری ادد نشه
خدمت دوستانی که اینده ممکن هست به چنین مشکلی برخورد کنند.
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("");
}
}
}
}
});
اینم عکس زمانی که یکی از کانکت ها رو ویرایش کردم و نام یکی از کانکت ها رو به جاش گذاشتم.
سلام هم دوره ای عزیز
حقیقت الگوریتم های زیادی میشه در نظر گرفت برای این کار
و از اونجایی که من دوست داشتم کار شما سریع تر راه بیفته به ذهنم رسید ساده ترین روش رو بگم
(البته چون با گوشی در حال حاظر هستم و کمی نوشتن کد سخت هست به همین دلیل اگر که متوجه نشدین حتما اعلام کنین من کد رو مینویسم واستون)
اما ساده ترین روش ممکن چی هست؟
این هست که شما بیاین با ی حلقه فور یا وایل( هر کدام که راحت تر هستید)
داخل لیست کانتکت هاتون پیمایش کنین یعنی شرط حلقه این باشه که بنویسید listContact.size(); و سپس در بدنه حلقه شرطی بنویسید که اگر listContact.get(i).equalsIgnoreCase(Name Daryafti بود (یعنی اگر آیتم i ام ما برابر بود با رشته دریافتی (که میتونین برای این کار از متدی در آداپتور استفاده کنین که رشته دریافتی رو از متد مربوطه دریافت نمایید) پس بیا و مقدار رو اضافه نکن و بنویسید else (در غیر این صورت ) بیا و .add کن روی لیست مربوطه در آداپتور
اگر منظور من رو متوجه نشدین حتما اعلام کنین تا به صورت کد واستون توضیح مفصل تری بدم
موفق و پیروز باشین
سلام
پوریا تو این کدی که نوشتی بهتر نیست که فقط اون قسمت که داره چک میکنه ایتم تکراریو تو حلقه بزاریم..؟؟
چون الان کد اد کردن و اپدیت کردن ایتم هم تو حلقه گزاشتیم و این مشکل ساز میشه...درواقع تو حلقه گیر میکنه...
تست هم کنی اپ فریز میشه و در اخر فورس کلوز میده...
اگه اون قطعه کد رو بیاریم بیرون از حلقه اکی میشه...
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("");
}
}
});