رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

ساخت لیست سفارشی در اندروید

در این تاپیک به مبحث ساخت لیست سفارشی در اندروید پرداخته میشود که در هر اپلیکیشن اندروید حتما باید با این امکان برخورد کرده اید.مثلا دیده اید که در یک سطر تعدادی زیاد اطلاعات به شکلی منظم کنار هم قرار گرفته انند مانند تصویر نمونه زیر :

211x351http://p30droid.com/Uploader/do.php?img=30[/img]

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

عنوان پروژه: 

در این مثال قصد داریم کاربر اطلاعاتی مانند نام و نام خانوادگی و کد را وارد نماید سپس در هر سطر لیست این اطلاعات لیست شده برای کاربران نمایش داده شود.

1-ابتدا یک کلاس برای تعریف دیتایس و ایجاد جدول مربوطه با سه فیلد را ایجاد میکنیم.اگر به مبحث دیتابیس در اندروید آشنایی ندارید لطفا مقاله اول و دوم در رابطه با دیتابیس در اندروید را مطالعه نمایید.

[shcode=java]

import java.util.ArrayList;

import java.util.List;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE = "DATABASE_listview.db";

    public static final String tbl_data = "tbl_data";

    public static String id = "ID";

    public static String name = "name";

    public static String family = "family";

    // method to create or connect to a database

    public DatabaseHelper(Context context) {

        super(context, DATABASE, null, 1);

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + tbl_data + " (" + id + " TEXT ," + name

                + " TEXT," + family + " TEXT);");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS  " + tbl_data);

        onCreate(db);

    }

    public void AddRowtable(String id, String name, String family) {

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues data = new ContentValues();

        data.put("ID", id);

        data.put("name", name);

        data.put("family", family);

        db.insert(tbl_data, null, data);

    }

}

[/shcode]

در این کلاس که کدهای آن را مشاهده میکنید یک تابع نیز به نام AddRowtable وجود دارد که برای وارد کردن اطلاعات در دیتابیس مورد استفاده میشود.

2- سپس در اکتیویتی اصلی برنامه یک لیست ویو قرار گرفته است برای نمایش اطلاعات موجود ، که از یک لیست سفارشی استفاده شده است.

فایل activity_main.xml که در مسیر res/layout میباشد را باز نمایید.

[shcode=xml]

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

   

        android:id="@+id/listView1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true" >

   

[/shcode]

3-اکتیویتی MainActivity را باز کنید:

در این اکتیویتی آن چنان که در xml ان مشاهده نموید،فقط یک لیست ویو قرار دارد، پس ابتدا آن را تعریف میکنیم و  در مرحله آخر اطلاعات موجود در دیتابیس در آن قرار میگیرد.در این کلاس یک تابع به اسم FillData تعریف شده که اطلاعات موجود در جدول را میخواند و در Hashmap قرار میدهد.

do.php?img=31

شرح :

از خط 18 تا 21 ویجت ها و کلاس ها تعریف شده اند.

خط 26: لیست ویو تعریف  شده است.

خط 27 : یک شی جدید از کلاس دیتابیس با Context کلاس جاری را ایجاد کردیم.

خط 36 : FillData برای این در onResume فراخوانی شده است که چون قرار است به اکتیویتی افزودن برویم و بعد دوباره back میزنیم تا اطلاعات بروز رسانی شود.

do.php?img=34

خط 45 : یک Cusrsor تعریف شده تا شرط مورد نظر که انتخاب همه اطلاعات است را اجرا کند

خط 52 : یک حلقه تعریف شده، به اندازه تعداد رکورد های پیدا شده از شرط اجرا میشود

خط 54 : cursor یک رکورد به جلو میرود: چون cursor از صفر شروع میشود برای اینکه برنامه اخطار ندهد یه خانه به جلو میرویم

خط 55 : یک Hashmap را تعریف میکنیم تا اطلاعات فیلدها را در آن بطور موقت ذخیره کنیم.

خطوط56  تا 58 : این خطوط اطلاعات پیدا شده از شرط که در cursor قرار دارند را ذخیره میکنند.

خطوط 60 تا 62 : این خطوط نیز اطلاعات موجود در متغیرهای بالا در خود ذخیره میکنند و هر فیلد دارای اسمی خاص میباشد.

خط 64: اطلاعات در شی Datalist ذخیره میشود.

خط 67 : اطلاعات پیدا شده و ست شده در Datalist را به کلاس listviewAdapter  میفرستد  تا بصورت لیست سفارشی نمایش داده شود.

68: سرانجام اطلاعات پیدا شده در لیست ویو نمایش داده میشود.

کلاس listviewAdapter  : این کلاس وظیفه نمایش اطلاعات را در قالب مشخص شده را داردو

do.php?img=37

خط : 56 : در این خط تعیین میکنیم که لیست ما از کدام layout باید برای نمایش استفاده کند.

در این کلاس آنچنان که ملاحضه میکنید در خطوط 60 تا 64 فیلدها فایل list-row که در مسیر res/layout میباشند را تعریف میکنیم.این لایوت همان لیستی میباشد که آن را طراحی کرده ایم تا لیست مورد نیاز ما را نمایش دهد.

do.php?img=38

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/list_selector"

    android:orientation="horizontal"

    android:padding="5dip" >

   

        android:id="@+id/thumbnail"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_marginRight="5dip"

        android:background="@drawable/image_bg"

        android:padding="3dip" >

   

   

        android:id="@+id/title"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignTop="@+id/thumbnail"

        android:layout_toRightOf="@+id/thumbnail"

        android:text="title"

        android:textColor="#040404"

        android:textSize="20dip"

        android:textStyle="bold"

        android:typeface="sans" />

   

        android:id="@+id/date"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@id/title"

        android:layout_marginTop="1dip"

        android:layout_toRightOf="@+id/thumbnail"

        android:gravity="left"

        android:text="family"

        android:textColor="#FFA500"

        android:textSize="14dip" />

   

        android:id="@+id/list_list"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentRight="true"

        android:layout_alignTop="@id/date"

        android:layout_marginRight="5dip"

        android:background="#E5E4E2"

        android:gravity="right"

        android:text="ID"

        android:textColor="#0000FF"

        android:textSize="12dip"

        android:textStyle="bold" />

[/shcode]

4-افزودن اطلاعات: برای افزودن اطلاعات ، روی دکمه منو کلیک کنید و گزینه add  را انتخاب کنید ، تا وارد اکتیوتی userActivity شوید :

do.php?img=39

افزودن اطلاعات :

do.php?img=35

خطوط 27 تا 32 : ویجت ها را تعریف میکنند.

خط 34 : وارد رویداد کلیک دکمه ثبت میشویم

خط 39 این دستور،تابع موجود در کلاس دیتابیس DatabaseHelper که به اسم dbh را میباشد اجرا میشود و اطلاعات در فیلدهای موجود ذخیره میشود.

دانلود مثال از آپلود سنتر انجمن پی سی دروید :

http://p30droid.com/Uploader/do.php?id=36

پسورد :

www.p30droid.com

دانلود نسخه PDF مطلب.

امیدوارم مفید واقع شود.

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 ماه بعد...

خیلی کد عالی هست . اما دوست عزیز اگر بخوام بین هر آیتیم در لیست ویو مثلا" 10 پیکسل فاصله بندازم دقیقا چکار باید کنم ؟

هرچی فاصله میدم اجزای داخل باکس فاصله میگیره !!!!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

می توانید در listview کد زیر رو اضافه کنید :

    android:dividerHeight="5dp"

به صوت کلی میشه اینطور :

    android:id="@+id/list"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:dividerHeight="5dp"/>
لینک ارسال
به اشتراک گذاری در سایت های دیگر

می توانید در listview کد زیر رو اضافه کنید :

    android:dividerHeight="5dp"

به صوت کلی میشه اینطور :

    android:id="@+id/list"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:dividerHeight="5dp"/>

ممنون از پاسخ شما دوست عزیز . 

مشکل حل شد . حالا اگر بخوام از کناره ها ( از سمت راست و چپ ) صفحه هم فاصله داشته باشه باید چکار کنم ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 8 ماه بعد...

میشه لطفا این کد رو طوری تغییر بدید که فقط یک ستون از ستون های جدول نمایش داده بشه؟

و همچنین کدی که قابلیت سرچ تو این ستون جدول رو با توجه به ورودی کاربر داشته باشه؟

(پروژه دیکشنری، با دو ستون انگلیسی و فارسی و قابلیت سرچ در کلمات انگلیسی)

خیلی فوریه لطفا جواب بدید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

میشه لطفا این کد رو طوری تغییر بدید که فقط یک ستون از ستون های جدول نمایش داده بشه؟

و همچنین کدی که قابلیت سرچ تو این ستون جدول رو با توجه به ورودی کاربر داشته باشه؟

(پروژه دیکشنری، با دو ستون انگلیسی و فارسی و قابلیت سرچ در کلمات انگلیسی)

خیلی فوریه لطفا جواب بدید.

برای مثال یک ستونی با قابلیت جستجو من اومدم مثال موجود در مقاله اول اقای مدیر رو تغییر دادم که قابلیت جستجو به اون اضافه کردم!

ListView.zip

ListView.zip

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

وقتی این سورس ایمپورت کردم، بدون اینکه کد تغییر بدم، thumbnail خطا میده

[shcode=xml] 

        android:id="@+id/thumbnail"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_marginRight="5dip"

        android:background="@drawable/image_bg"

        android:padding="3dip" >

   

[/shcode]

اشکال از کجاست؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببخشید

نحوه حذف کردن رکود از طریق لیست ویو آموزش ندادین؟ هر جا در پست انجمن می گردم، پیدا نمی کنم

خودمم درست کردم، ولی کار نمی کنه

تابع متد

[shcode=java]

protected void removeItemFromList(final int position) {

    // TODO Auto-generated method stub

       

    final DBbookmark dele = dBBookMark.get(position);

        // نمايش يک پنجره پيغام

        AlertDialog.Builder alert = new AlertDialog.Builder(BokMarkHOA.this);

        alert.setTitle("حذف");

        alert.setMessage("آيا ميخواهيد آيتم از ليست حذف شود؟");

        alert.setPositiveButton("بله", new OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

               

                db.open();

                db.deleteContact(position);

               

                db.close();

               

            }

        });

       

        alert.setNegativeButton("خير", new OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                // کارهايي که بعد از کليک برروي خير انجام ميگيره

                // حذف پيغام نمايش داده شده

                dialog.dismiss();

            }

        });

        alert.show();

        updataListView();

    }

[/shcode]

کلاس پایگاه داده DBbaseAdapter

[shcode=java]

    public boolean deleteContact( long rowld)

    {

        //String mail,String tabale,

    //    return db.delete(tabale, KEY_EMAIL + " LIKE '" + mail + "'", null) > 0;

        return db.delete(DATABASE_MAINTABLE, KEY_ROWID + "=" + rowld, null) > 0;

       

       

    }

[/shcode]

خواهش می کنم جواب بدین

ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

متن خطایی که از  thumbnail می گیره چیه ؟ 

position رکوردی که می خوای از لیست حذف کنی و ورودی متد removeItemFromList ، چطوری بدست اومده ؟ برای حذف در پایگاه داده بر طبق کد از طریق کلید اصلی (rowId)  اقدام شده ایا position مورد نظر همون rowId است؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 9 ماه بعد...
  • 5 ماه بعد...

سلام میخواستم بدونم اگه بخوایم دکمه و ادیت تکست هارو به صفحه اصلی ببریم و در قسمت پایینشون لیست ویو باشه که لیست رو نشون بده باید چیکار کنیم؟یعنی دیگه نریم تو اکتیویتی بعدی و از اونجا اضافه کنیم تو اصلی اضافه کنیم و مشاهده کنیم؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 3 هفته بعد...
  • 3 هفته بعد...

سلام میخواستم بدونم اگه بخوایم دکمه و ادیت تکست هارو به صفحه اصلی ببریم و در قسمت پایینشون لیست ویو باشه که لیست رو نشون بده باید چیکار کنیم؟یعنی دیگه نریم تو اکتیویتی بعدی و از اونجا اضافه کنیم تو اصلی اضافه کنیم و مشاهده کنیم؟

کاری نداره، شما فقط باید تو xml برنامه دکمه و ایت تکست هارو بالا و لیست ویو رو زیر اونا قرار بدی. بعدشم که برای لیست ویو به همون روش قبل عمل کنی. یعنی هیچ فرقی با قبل نم کنه.


سلام واقعا ممنون از اموزشتون

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

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

        listview1.setOnItemClickListener(new OnItemClickListener() {



            @Override

            public void onItemClick(AdapterView<?> arg0, View view, int position,

                    long arg3) {

                // TODO Auto-generated method stub

                switch (position) {

                case 0:

                    break;

                    

                case 1:

                    break;

                    

                    .

                    .

                    .



                    

                default:

                    break;

                }



            }

        });


با سلام

میشه درباره hashmap بیشتر توضیح بدین که دقیقا جه کاری میکنه؟؟؟

مطالبتون عالی بود ممنون

برای ذخیره دیتا استفاده میشه. به عنوان مثال وقتی اطلاعات از دیتابیس خونده میشه، تو hashmap ذخیره میشه و در نهایت از hashmap خونده میشه و تو xml ست میشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 ماه بعد...

حالا اگه بخوایم یه عکس هم از db دریافت کنیم چطور؟

منظورم اینه که اول عکس رو _حالا چه به صورت دستی یا چه با استفاده از کد_ توی db قرار بدیم بعدش اونو توی listview نمایش بدیم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 3 هفته بعد...
  • 1 ماه بعد...

سلام میشه لطفا بگید اگر بخواهیم به لیست ویو فایل های mp3 اضافه کنیم مثل دیکشنری که وقتی روش کلیک می کنیم صدای مربوط به همون کلمه رو پخش کنه ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 ماه بعد...

متوجه شدم چیکار باید انجام بده ولی متوجه نشدم کجا تعریفش کردید!!همون کلاسی میشه که توش getview تعریف میشه ؟!! از چیز خاصی نباید extends بشه ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

یه پیشنهاد میکنم اول این پروژه رو کلان گام به گام برو جلو بعد روش تغییراتت رو روش اعمال کن فک کنم بهتر برای خودت چون بهتر چمو خمش دستت میاد

و بیشتر می تونی باهاش ارتباط برقرار کنی

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 9 ماه بعد...

سلام من می خوام با لیست ویو یک‌ کتاب بسازم که با کلیک روی هر آیتم یک داستان جدید باز شه مشکل آنجاست که می خوام کلا دوتا اگزمل داشته باشم یکی برای نمایش لیست موضوعات دومی برای نمایش متن داستانها .یعنی هر بار یک داستان جدید در اون فایل اگزمل باز شه ولی راهشو نمیتونم .اگه راهنمایی کنید که چطوری این کارو کنم ممنون میشم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط hami develop
      سلام خدمت دوستان عزیز.
      من یک اپلیکیشن اندروید درست کردم و از کلاس service ارث بری کردم و هر دقیقه یک بار یک وب سایت را چک میکند و در صورتی که اطلاعات جدیدی در این وب سایت وجود داشته باشد به من یک نوتیفیکیشن میدهد.
      آیا بهتر است که از کلاس Worker ارث بری کنم تا برنامه وظایفی را انجام دهد؟
      نکته: در واقع می‌خواهم برنامه برای مدت طولانی اجرا شود و هیچ گاه متوقف نشود.
      اگر کسی از دوستان تجربه کار با Worker را دارد لطفا بفرمایند که اختلاف
      Worker 
      و
      Service 
      دقیقا چی هست و برای برنامه ای که همیشه در بک گراند در حال اجرا است، کدامیک بهتر است؟
      سپاس بی کران.
    • توسط AliAmani
      سلام.وقت بخیر.من به یه ارور بر خوردم. دیباگر attach نمیشه.لطفا راهنماییم کنید.
      اندروید استودیو را حذف و دوباره نصب کردم.avd جدید ایجاد کردم.adb را kill و بعد start کردم.اما درست نشد.
      مشکل فقط در پروژه های اندروید است و در پروژه های فلاتر مشکلی نیست.
      debug.pdf
    • توسط 3245
      سلام
      من درحال اموزش اندروید هستم،
      برای این کار، ویدیوهای ساخت کتاب رو خریدم، اما چون اطلاعاتم خیلی کمه،درک مطالب توی این ویدئو سخته برام
      میخواستم اگرممکنه دوستان کلیپی پیشنهاد بدن که سبک تر باشه و بیشتر به مباحث پایه بپردازه، البته خیلی هم نخواد از صفر شروع کنه که خسته کننده میشه...
      طوری باشه پروژه محور باشه اما پروژه سبکی باشه.
       
      ممنون.
       
       
    • توسط Zeynab Tri
      سلام. دوستان بنده یک عدد تازه کار در برنامه نویسی اندروید هستم و نمیدونم این ارور رو چطور حل کنم. ممنون میشم اگر کسی میتونه من رو راهنمایی کنه.عکسش رو گذاشتم.

  • فایل

×
×
  • اضافه کردن...