سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس
سلام؛
من برای بروزرسانی لیست ویو دارای Adapter مشکل دارم و نمی تونم بعد از حذف یا ویرایش یک آیتم، اون رو بروزرسانی کنم.
متد حذف اطلاعات در اداپتر:
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DBConteroler dbConteroler = new DBConteroler(context);
boolean X = dbConteroler.DeleteBox(individualCar.getPostID());
if (X) {
} else {
Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
}
}
});
من برای بروزرسانی از این روش استفاده کرده بودم که بعد از حذف/ویرایش یک آیتم مجددا این متد رو در اکتیویتی مورد نظر فراخوانی می کردم:
public void CreateList() {
ArrayList<Box> boxes = db.getBoxs();
Collections.reverse(boxes);
Adaptorz adaptorz = new Adaptorz(MainActivity.this, R.layout.flod_list, boxes);
adaptorz.notifyDataSetChanged();
LinearLayout ll = (LinearLayout) findViewById(R.id.llMain);
Button btnAdd = (Button) findViewById(R.id.btnAdd);
listView.destroyDrawingCache();
listView.setVisibility(ListView.INVISIBLE);
listView.setVisibility(ListView.VISIBLE);
listView.setAdapter(adaptorz);
}
و این هم خطا:
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ir.radin.posto.posto, PID: 13239
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList ir.sto.sto.DBConteroler.getBoxs()' on a null object reference
at ir.sto.sto.MainActivity.CreateList(MainActivity.ja va:69)
at ir.sto.sto.Adaptorz$2.onClick(Adaptorz.java:155)
at android.view.View.performClick(View.java:5685)
at android.view.View$PerformClick.run(View.java:22481 )
at android.os.Handler.handleCallback(Handler.java:751 )
at android.os.Handler.dispatchMessage(Handler.java:95 )
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.jav a:6274)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:776)
البته، فکر می کنم راه من اصولی نیست، بنابراین اگر راه اصولی رو برای بروزرسانی لیست مطرح کنید، متشکرم می شوم.
نقل قول: سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس
نقل قول:
ArrayList<Box> boxes = db.getBoxs();
این خطا داره میگه این شی db مقداردهی نشده Null هست این شی اگر تعریف سراسری داره که وقتی تو این متد می خواهید استفاده کنید باید قبلش مقدار داشته باشه که ظاهرا مقداری نداره.!
نقل قول: سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس
نقل قول:
نوشته شده توسط
farhad_shiri_ex
این خطا داره میگه این شی db مقداردهی نشده Null هست این شی اگر تعریف سراسری داره که وقتی تو این متد می خواهید استفاده کنید باید قبلش مقدار داشته باشه که ظاهرا مقداری نداره.!
سلام؛
آره، البته این مشکل نباید اختلالی ایجاد می کرد فکر کنم. ولی به هر حال کارها رو بجای اینکه در اکتیویتی انجام بدم، بردم داخل خود Adapter. اونجا همه آبجکت ها هستند و خوشبختانه هیچ کدام نال هم نیستند.
DBConteroler dbConteroler = new DBConteroler(context);
boolean X = dbConteroler.DeleteBox(individualCar.getPostID());
if (X) {
box.remove(position);
Adaptorz.this.notifyDataSetChanged();
Adaptorz.this.notifyDataSetInvalidated();
} else {
Toast.makeText(context, "در حذف بسته خطایی پیش آمده است.", Toast.LENGTH_SHORT).show();
}
نقل قول: سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس
نقل قول:
آره، البته این مشکل نباید اختلالی ایجاد می کرد فکر کنم
دقیقا درست میگی !!!
کلا این helper آداپتر های اندروید روی اعصاب هستند یعنی فکر کن یک لیست می خواهی نشون بدی باید یک اکتیویتی یک آداپتر کلاس یک فایل xml بنویسی بعد این هارو هی وصله پینه کنی بهم من که حالم بد میشه!!
البته مثلا RX-JAVA یه کارهایی کرده که این وضعیت تو اندروید بهتر بشه!
ولی وقتی می تونی با نهایت 10 تا خط یک لیست ویو بنویسی تو Qt ویا ReactJS یکم عذاب آور بمونی تو اندروید ولی خوب اندروید راحته ... چون قواعدش ضعیفه!
نقل قول: سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس
یه نگاهی به Android Architecture Components داشته باشید، کارتون رو تمیزتر و راحتتر میکنه.