مشکل در ذخیره متن editText های ریسایکلر ویو در دیتابیس(اصلاح سوال قبل)
سلام بر دوستان خوب uncox
بنده یک ریسایکلر ویو دارم که داخلش چندین editText وجود داره(به انتخاب کاربر ادیت تکست ها کم و زیاد میشن.
با کد زیر مقادیر ادیت تکست هارو دونه دونه داخل دیتابیس insert میکنم
for (int i = 0; i < listRecyclerItem.size(); i++) {
String where = listRecyclerItem.get(i).getType();
if (where.equals("e")) {
View view = desRec.getChildAt(i);
EditText nameEditText = view.findViewById(R.id.desEditText);
editTextContent = nameEditText.getText().toString();
} else
editTextContent = "";
String type, viValue;
type = listRecyclerItem.get(i).getType();
viValue = listRecyclerItem.get(i).getVivalue();
db.insertNoteDes(insertItem(type, viValue, editTextContent, db.getLastIdMainNote()));
}
مشکل اینجاست که تابع
getChildAt(i);
و یا تابع getChildCount فقط ادیت تکست هایی که میشه دید رو در بر میگیرن.وقتی یکی از editText ها اسکرول شه بره بایین فقط ادیت تکست هایی که کاربر میتونه ببینه رو این توابع میبینند و اونایی که تو صفحه نیستن و اسکرول شدن رفتن null تلقی میشن و ذخیره نمیشن.
امیدوارم مظورمو رسونده باشم.لطفا راهنماییم کنید
ساده ترین راه اینه که یه arraylist بسازی و هر edittext رو که به ریسایکلر ویو اضافه میکنی داخلش بریزی و اونوقت میتونی توی حلقه به جای متد getchild از لیست بخونی و ذخیره رو انجام بدی
به کلاسی که دارید از روش آرایه میسازید و پاس میدید به آداپتر که باهاش لیست ساخته میشه یک آرایه اضافه کنید که اون آرایه باید از یک کلاسی ساخته شده باشه که این کلاس دارای یک مقدار EditText هست و یک مقدار String
حالا یک LinearLayout در ایتم های هر لیست داشته باشید که تمام editText های شما توی این قرار بگیره هربار که آیتیمی لود میشه ابتدا این LinearLayout رو removeChild کنید و بعدش بر اساس اون آرایه حلقه for بزنید edittext به LinearLayout اضافه کنید و مقدار String هر کدوم رو هم بهش بدید .
حالا اگر کاربر این وسط edittext جدیدی ساخت کافیه اون آرایه ایی که در ابتدا باهاش کلاس رو ساختید رو مدیریت کنید و دیتاهارو ویرایش کنید ، یا اگر مقدار String تغییر کرد کافیه مقدار ایندکس رو به اون ارایه اولیه بدید و دوباهر مقدار ایندکس رو به ارایه که ساختید بدید مقدار String جدید رو دوباره بهش ست کنید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .