با درود و احترام
دو سئوال پیرامون برنامه
اول:
باگ برنامه:
اگر آیتمی در حالت انتخاب برای ادیت بره ولی در این بین و قبل از ادیت و done کردن ، LongClick روی اون آیتم انجام بشه اون آیتم حذف و آیتم بعدی روی حالت انتخاب قرار میگیره و در صورت done کردن، ادیت روی آیتم اشتباه انجام میشه. چگونه میشه این مسئله رو درست کرد؟
دوم:
اگر هنگام حذف آیتمی بخوایم از کاربر برای اطمینان از حذف سئوال بپرسیم که که دکمه ok-cancel داشته باشه. راهکارش چی هست؟
ممنون که پیگیری میکنید
سلام و احترام
اولش مفهوم سوال رو متوجه نشدم ولی خب کنجکاو شدم و برنامه رو تست کردم و واقعا چقدر ریز بین و سوال جالبی بود
اما راه پیشنهادی این راه شاید کمی غیر حرفه ای به نظر بیاد ولی من برای ساده بشه اینطوری گفتم
مراحل:
public static boolean isEdit = false;
public void bindContact(final String fullname) {
fullnameTv.setText(fullname);
firstCharacterTv.setText(fullname.substring(0, 1));
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemEventListener.onItemClick(fullname, getAdapterPosition());
isEdit = true;
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(isEdit==true){
return false;
}
contacts.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
return false;
}
});
}
سپس در MainActivity در خط ۶ مقدار رو fase کردم
addNewContactBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (fullNameEt.length() > 0) {
if (editingItemPosition>-1){
ContactsAdapter.isEdit = false;
adapter.updateContact(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("");
}
}
});
نکته اول : استاتیک تعریق کردم چرا که در هر کلاس بنتوانم به ان دسترسی داشته باشم
نکته دوم : راحل تمیز تر این هست که با ستر و گتر یا حتی راه حل بهتر با Enum ها این مسیله رو هندل کنیم که در ادامه اشنا خواهی شد
پس همین راه حل رو در خاطر بسپار
اما ی نکته ما هیچوقت برای ادیت ایتمی نمیایم این کارا رو انجام بدیم بلکه برای ادیت به کاربر یک دیالوگ نشان میدهیم که به راحتی عمل ادیت را انجام بدهد (ادامه سر فصل Sqlite پروژه تودولیست اشنا خواهی شد)
سوال دوم :برای استفاده از این راه کار سر فصل فایل توضیح داده شده((حذف، کپی و Move کردن فایل)) ( که
پیشنهاد من این هست روند اموزش رو دنبال کنی چرا که تمام این سوالات ذهنی در اینده اشنا خواهی شد .
---------------------
همونطور که گفتم ما در پروژه ای پیش نمیاد بخواهیم اینطوری عمل ادیت رو انجام بدیم به همین دلییل وقتی دیالوگی به کاربر نشان داده بشه ما میایم اونو cancelable ش رو false قرار میدهیم تا کاربر اجازه بستن دیالوگ نداشته باشه و اینطوری از این باگ جلوگیری میشه
پیروز باشی پژمان جان
ممنون پوریا جان.
فکر میکنم لزومی به استاتیک معرفی کردن متغیر isEdit نیستا. چون نمونه adapter رو از کلاس ContactAdapter توی کلاس MainActivity داریم که میتونیم براحتی درون MainActivity متغیر isEdit رو صدا بزنیم. درست نمیگم؟