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

سلام
شما میتونید اونجایی که کوئری خودتون رو نوشتید با استفاده از دستور order by مشخص کنید که داده ها بر حسب چه فیلدی مرتب بشن
مثلا در کد زیر اطلاعات از جدول table خونده میشه(اونایی که id بزرگتر از 3 دارند) و اطلاعات بر حسب فیلد name مرتب میشن
select * from table where id>3
order by name

با متد زیر هم می تونید این کارو بکنید:
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
خروجی نداره و مستقیما خود آرایه رو بر اساس حروف الفبا مرتب می کنه.

ممنون از پاسختون
فکر میکنم بهتر این باشه که موقع کوئری گرفتن از دیتابیس با دستور 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
مگه نمیشه فیلدها رو از چندین جدول گرفت ؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .