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

استفاده از Cursor دیتابیس برای ساخت ListView

Reza AF  12 سال پیش  12 سال پیش
0 0

سلام استاد
من میخام یک لیست رو با استفاده از یک دیتابیس مقدار دهی کنم.
و میخام به تعداد رکوردها، لیست ایجاد بشه(منظور همون الوار) . من یک Query به این صورت نوشتم :

SELECT * FROM sport

این کدیه که نوشتم. قسمت دوم که بصورت عددی هستش تغییر میکنه، ولی قسمت تایتل فقط آخرین گزینه دیتابیس توی همه لیستها تکرار میشه.

{    
while (G.cursor.moveToNext()) {
String temp1 = G.cursor.getString(G.cursor.getColumnIndex("device_name"));
String temp2 = G.cursor.getString(G.cursor.getColumnIndex("active_mus"));

set_list(temp1, j++);
}

G.cursor.close();

adapter.notifyDataSetChanged();
}


private void set_list(String name, int musel) {
StructNote note = new StructNote();
note.name_item = name;
note.muc_item = musel;
Log.i("log", "nam = " + name + " azole = " + musel);
G.notes.add(note);
}

و داخل همین حلقه مقادیر رو از دیتابیس یخونم و آیتمهای لیست رو مقدار دهی کنم؟ تا به تعداد رکوردها لیست ایجاد شه؟
البته من اینکارو کردم، تعداد لیستهایی که ایجاد میشه به تعداد رکوردهاست. اما مقادیر درست ست نمیشه. مثلا من میخام تیتر هر لیست، از دیتابیس خونده بشه، و هر لیست یک تیتر خاص بگیره . اما همه لیستها یک مقدار میگیرن و اون هم مقدار آخرین رکورد هستش.

سلام، سورس نمایش رو از همون مثال لیست شما برداشتم :

private static class ViewHolder {

    public ViewGroup layoutRoot;
    public TextView  txtTitle;
    public TextView  txtDescription;
    public ImageView list_image;


    public ViewHolder(View view) {
        txtTitle = (TextView) view.findViewById(R.id.name_dastgah);
        txtDescription = (TextView) view.findViewById(R.id.azole_faal);
        layoutRoot = (ViewGroup) view.findViewById(R.id.layoutroot);
        list_image = (ImageView) view.findViewById(R.id.img_list);
    }


    public void fill(final ArrayAdapter adapter, final StructSport item, final int position) {
        txtTitle.setText(item.name_item);

        txtDescription.setText(item.muc_item);


        layoutRoot.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                /*  Intent intent = new Intent(G.currentActivity, ActivityEdit.class);
                 intent.putExtra("POSITION", position);
                 G.currentActivity.startActivity(intent);*/
            }
        });

    }
}

اطلاعات دیتابیس رو قبل از اینکه بریزه توی آرایه توی لاگ کت درست نمایش میده، اما بازم فقط گزینه آخر توی لیست پر میشه. جالب اینجاست اگه یک شمارنده بذارم، اعداد به ترتیب توی لیست ذخیره میشه!

من چک کردم توی نمایل آرایه مشکل نداره بلکه مشکل از مقدار دهیه آرایه است. من آرایه رو بلافاصله بعد از مقدار دهی توی حلقه while دوباره لاگ کردمش همشون یک مقدار داشتن. !

من دیتابیس رو با اون افزونه فایرفاکس ایجاد کردم، و بعد فقط توی اکلیپس وارد کردم. ممکنه مشکل ازون باشه؟ البته هیچ مشکل ظاهری نداره یعنی داره اطلاعات رو میخونه و نمایش میده اما وارد آرایه نمیکنه!

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  12 سال پیش
+1 0

نه نشد. الوار ها تعداد Slot هایی هستند که برای پوشاندن ارتفاع صفحه کافی هستند. در حالیکه اطلاعات یک دیتابیس ممکن است از 1000 تا تجاوز کند.

بله می تونید، اما آیتم های ArrayList رو مقدار دهی باید بکنید دیگه چون خود ListView مقدار دهی نمیشه.

همه سورسها به نظر درست میاد. اشکال تو سورسهایی هست که برای من ارسال نکردی و باید کل سورسها رو ببینم و تست کنم.
از بخش «عیب یابی» استفاده کن و با نوشتن Log در بین کدها سعی کن متوجه بشی تا کجای کار درست پیش میره و تا کجای کار غلط.

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