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

مرتب کردن ListView بر اساس حروف الفبا

Reza  8 سال پیش  8 سال پیش
0 0

سلام

    من یه لیست ویو دارم که داده ها رو از دیتابیس میخونه ، و میخوام اولین فیلدش که ( که از نوع String ) هست بر اساس حروف الفبا تنظیم بشه . برای همین میخوام قبل از اینکه adapter رو به لیست ویو ست کنم آرایه adapter رو مرتب کنم .

    یه راه به ذهنم میرسه که اول اون فیلد مورد نظر رو در یک آرایه بریزم و بعد مرتب کنم . حالا بر اساس این آرایه مرتب شده سایر فیلد ها رو از دیتابیس بگیرم و در آرایه خودشون بریزم . حالا بر اساس این آرایه ها adapter رو بسازم .

    سوالم اینه که راه کوتاهتر و سریعتری وجود نداره ؟ مثلا آرایه adapter رو ( که شامل تمامی فیلدهاست ) بسازم ، و بهش بگم بر اساس فلان فیلد مرتب شو و خود به خود سایر فیلدها بر اساس اون فیلد مرتب بشن ؟

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
reza  8 سال پیش
+2 0

سلام

شما میتونید اونجایی که کوئری خودتون رو نوشتید با استفاده از دستور order by مشخص کنید که داده ها بر حسب چه فیلدی مرتب بشن

مثلا در کد زیر اطلاعات از جدول table خونده میشه(اونایی که id بزرگتر از 3 دارند) و اطلاعات بر حسب فیلد name مرتب  میشن

select * from table where id>3 
order by name
پاسخ به سوال 
Amir  8 سال پیش
+2 0

با متد زیر هم می تونید این کارو بکنید:

public static void organizeAlphabetically(ArrayList<StructItem> items) {
    Collections.sort(items, new Comparator<StructItem>() {

        @Override
        public int compare(StructItem s1, StructItem s2) {
            return s1.name.compareTo(s2.name); // به جای name اسم فیلدی که می خواید آرایه بر اساس اون مرتب بشه رو بنویسید
        }
    });
}

دقت کنید که متد organizeAlphabetically خروجی نداره و مستقیما خود آرایه رو بر اساس حروف الفبا مرتب می کنه.

پاسخ به سوال 
Reza  8 سال پیش
0 0

ممنون از پاسختون

    فکر میکنم بهتر این باشه که موقع کوئری گرفتن از دیتابیس با دستور order by داده ها مرتب بشن . ولی من مشکلی دارم که هر کار کردم حل نشد و مجبورم از پاسخ Ninja ( که جواب گرفتم ) استفاده کنم .

    مشکل اینجاست که من چندین جدول دارم ( چون در بعضی فیلدها متفاوت هستن مجبور به ایجاد چند جدول شدم ) اما بیشتر فیلد ها مشترک هستن . حالا میخوام بر اساس دو فیلد مشترک ( name , done ) از تمام جدول ها لیست ویو رو پر کنم .

    برای اینکه از تمام جداول داده ها رو بگیرم از for استفاده کردم و به ازای هر جدول که کوئری میگیرم دستور order by داده های همون جدول رو مرتب میکنه و به آرایه اصلی اضافه میکنه ، و میره برای جدول بعد ، و باز داده های همون جدول مرتب میشه و به آرایه اصلی اضافه میشه ......  تا جدول آخر . یعنی داده ها در کل مرتب نیستن ولی به ازای هر جدول مرتب شدن .

    روش رو تغییر دادم و کل داده ها رو از کل جداول همزمان گرفتم ( بدون for ) تا یک بار روی تمام داده ها order by انجام بشه :

 Cursor cursor = G.database.rawQuery("SELECT name,done FROM table1,table2,table3 ORDER BY name", null);

ولی نمیدونم چرا از خط بالا خطا میگیره . متن خطا :

 FATAL EXCEPTION: main
 android.database.sqlite.SQLiteException: ambiguous column name: name (code 1): , while compiling:
SELECT name,done FROM table1,table2,table3 ORDER BY name

مگه نمیشه فیلدها رو از چندین جدول گرفت ؟

+1 0
تا جایی که من میدونم کوئری تون اشتباهه و باید به این صورت باشه : SELECT table1.name,table2.name,table3.name FROM table1,table2,table3 البته خیلی به جوابم اطمینان ندارم ،خیلی وقته با دیتابیس کار نکردم. (8 سال پیش)

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