آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Sort کردن ListView در onResume

iSheykhi  12 سال پیش  12 سال پیش
+1 0

با سلام، سال نو رو تبریک می گم
در آموزشها(10-01 Using ListView.mp4)(زمان 1:05:42) گفته شده برای به روزرسانی ListView وقتی از ActivityEdit.java به ActivityMain.Java بر می گردیم از دستور

             adapter.notifyDataSetChanged();

استفاده می کنیم
خب حالا سوال اینجاست که وقتی مقادیر رو از دیتابیس آپدیت می کنیم و به ActivityMain.Java بر می گردیم ListView به حالت قبلی Sort شده و با مقادیر جدید Sortصورت نمی گیره

حالا سوال اینجاست که بری Sort کردن مجدد که در onCreate از دیتابیس مقادیر رو می گیره و Sort می کنه(16-02 Market Project - Local Database.mp4)  (زمان 18:06)

 Cursor cursor = G.db.rawQuery("SELECT * FROM tblitem ORDER BY fldSort ASC", null);

آیا

 adapter.sort(comparator);

کارایی داره؟ و چطوری می تونم ازش استفاده کنم که ListView بر اساس مقادیر خاصی که در اون هست Sort بشه

آیا باید تمام کدها رو توی onResume معرفی کنم؟ این روش جواب می ده اما به نظر من یک جور کلک مرغابیه و استاندارد نیست

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
iSheykhi  12 سال پیش
0 0

به نظر شما راهکار مناسبیه که تمامی کدها رو در onResume تعریف کرد و در هر بار اجرا اول محتوات رو پاک کرد و بعد مجدد از دیتابیس خوند؟

مشکل اول اینه که تراکنش با دیتابیس زیاد می شه

می دونم روز اول فروردینه اما خواهشی که دارم اینه که این مشکل رو حل کنیم تا همه با هم از نوروز لذت ببریم

پاسخ به سوال 
Borhani  12 سال پیش
0 0

سلام عزیز این مشکل ساده است فقط کافی است در کلاس edit پس از ادیت کردن و ذخیره در دیتابیس3 تا دستور اضافه کنی

اول آرایه را clear کنی  دوم آرایه را بروزرسانی کنی و دستور سوم کلاس ادیت را finish کنی. مثل این

 btn_save.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                for (int i = 0; i < G.Notes.size(); i++)
                {
                    int id = G.Notes.get(i).ID;

                    if (iditem == id)
                    {
                        G.EditTextToNotpad(edt_title.getText().toString().trim(), edt_body.getText().toString().trim(), id);
                        G.Notes.clear();
                        G.UPdataArrayNotepad();
                        G.CurrentActivity.finish();
                    }
                }

            }
        });
0 0
پس باید همه رو ببرم توی onResume و بیخیال دستکاری مستقیم توی لیستویو بشم(فلان Position رو ببرم بالا یا بیارم پایین). (12 سال پیش)
0 0
یعنی بعد از هر بار اپدیت دوباره همه چی از نو ساخنه میشده و مقدار دهی میشه دیگه؟ فک کنم هزینه بر باشه (12 سال پیش)
0 0
بله باید همه از اول بروز بشود نیاز به بردن در onresume نیست (12 سال پیش)
پاسخ به سوال 
uncocoder  12 سال پیش
0 0

چنانچه Database لوکال باشه

کلاً اگر Sort روی یک فیلد خاص هست بهترین راه استفاده از همون Query هست و در نهایت Cursor رو باز می کنیم و به ترتیب می خونیم و تو آرایه می ریزیم. پس نیاز به Sort مجدد نیست.

حالا شاید قرار باشه Realtime با زدن کلید هایی ستون مورد نظر برای Sort عوض شه. باز هم به نظر من منطقی تر گرفتن یک Query جدید هست چون Database به شدت از هر چیز دیگری سریعتر کار می کنه.

 

چنانچه Database آنلاین باشه

به صرفه نیست که برای هر Sort یکبار به سرور درخواست ارسال بشه و اطلاعات دریافت بشه. از طرفی نمیشه همه اطلاعات رو از سرور درخواست کرد. بنابراین باید کمی خواسته هامون رو محدود کنیم. در این بین برای هر Sort یکبار درخواست میفرستیم به سرور اما نتیجه برگشت داده از سرور رو یکجا Cache می کنیم ( آموزشش داده نشده اما می تونید خودتون با توجه به آموزشها فایل فرمت ها بنویسیدش ). دفعه های بعد اگر همان ستون با همان پارامتر ها در خواست Sort داشته باشه، از Cache می خونیم و هیچ نیازی به ارسال درخواست به سرور نیست. البته می تونیم بگیم اگر از لحظه ثبت این درخواست ( Cache شدن آن ) اینقدر زمان گذشته بود، فایل Cache پاک شه و دوباره درخواست از اینترنت داده بشه.

 

برای یک کلاس وب سرویس کامل مسابقه جدید مطرح شد، جستجو کنید «مسابقه»


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .