تالار گفتمان nCIS.ir

نسخه‌ی کامل: تهیه برنامه دفتر تلفن کوچک با اندروید از پایه
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
صفحات: 1 2
خوب حالا چطور ورودیهامونو نمایش بدیم ؟ با این تکه کد :
int i = 0;
db.open();
Cursor c = db.getAllContacts();
String rows[] = new String[c.getCount()];
if (c.moveToFirst()) {
    do {
        rows[i++]=DisplayContact( c );
    } while (c.moveToNext());
}
db.close();

واما توضیح کد فوق:
در کد فوق پس از باز کردن متغییر db که اشاره به دیتابیس ما داره با استفاده از تابع getAllContacts که در فایل DBAdapter.java تعریف گردیده تمام جدول دفتر تلفن ما واکشی میشه ودر متغیری به نام  c از نوع cursor قرار میگیره
با moveToFirst به اولین رکورد میرویم
برای این که هر ردیف از جدولمان را در یک خانه از آرایه برای نمایش در لیست قرار دهیم رکورد به رکورد آن را با تابع DisplayContact که کدش را در پایین گذاشتم میگذاریم ودر آخر دیتابیس را میبندیم حرکت برروی رکورد ها هم توسط
moveToNext صورت میگیرد
public String DisplayContact(Cursor c)
{
    return c.getString(0) + "   " + c.getString(1) + "   " + c.getString(2);
}

این تابع هر سه فیلد جدول را با یک فاصله کنار هم میگذارد
وحالا اصلی ترین نکته ای که من در کل این مبحث با هاش برخورد کردم و اون اینکه از چه ابزاری برای نمایش این آرایه لیستی در listView استفاده کنم
شاید شما راههای بهتری پیشنهاد بدید که منعطف تر و کاربردی تر باشه ولی آنچه من پیدا کردم فکر کنم آسونترین کار باشه و اون اینکه در فایل activity_main.java
به جای اینکه از کلاس Activity برای توسعه دادن (مشتق کردن=extend کردن) استفاده کنم از ActivityList  استفاده کردم و آی دی لیستم را به android:List تغییر دادم
همین کار کوچک باعث شد بتوانم لیستم را با یک خط کد زیر در listView  نمایش بدم
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, rows));


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

Button btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View arg0) {
       // TODO Auto-generated method stub
       // ویرایش کردن محتوای وارد شده توسط کاربر به بانک
       db.open();
       if (db.updateContact(1, et1.getText().toString(), et2.getText().toString())) {
           ShowText(" ویرایش شد" + et1.getText());
       }
       else {
           ShowText(" متاسفانه ویرایش نشد" + et1.getText());
       }
       db.close();
   }
});

وحذف :

Button btn3 = (Button) findViewById(R.id.button3);
btn3.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View arg0) {
       // TODO Auto-generated method stub
       // حذف کردن محتوای انتخاب شده توسط کاربر از بانک
       db.open();
       if (db.deleteContact(1))//c.getString(0) {
           ShowText(" حذف شد"+et1.getText());
       }
       else {
           ShowText(" متاسفانه حذف نشد"+et1.getText());
       }
       db.close();
   }
});

اجرای پروژه
[attachment=51]

واین هم کل پروژه تا اینجا

اما هنوز کار داریم برای حذف وویرایش لازمه که از روی لیست انتخاب کنیم تا در editText ها مون به نمایش در آد بعد ما اون رو انجام بدیم
(25-03-1394، 09:17 ق.ظ)shpegah نوشته: [ -> ]وحالا اصلی ترین نکته ای که من در کل این مبحث با هاش برخورد کردم و اون اینکه از چه ابزاری برای نمایش این آرایه لیستی در listView استفاده کنم
شاید شما راههای بهتری پیشنهاد بدید که منعطف تر و کاربردی تر باشه ولی آنچه من پیدا کردم فکر کنم آسونترین کار باشه و اون اینکه در فایل activity_main.java
به جای اینکه از کلاس Activity برای توسعه دادن (مشتق کردن=extend کردن) استفاده کنم از ActivityList  استفاده کردم و آی دی لیستم را به android:List تغییر دادم
همین کار کوچک باعث شد بتوانم لیستم را با یک خط کد زیر در listView  نمایش بدم
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, rows));

حالا از دوستانی که تجربه بیشتری دارند تقاضا میکنم در صورتیکه توضیح بهتری ویا راه حل بهتری دارند در اختیار ما قرار دهند


سلام دوست من
ممنون از آموزش خوبت
فقط به نظرم کدت رو یه کم خوانا تر بنویس مثلا بجای همین کد میتونی از این دو خط استفاده کنی تا کم کم بقیه با نحوه ی نوشتن این کدها آشنا بشن.
ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,android.R.simple_list_item_1,row));
myList.setAdapter(adapter);

کد رو تایپ کردم ، امیدوارم خطایی چیزی نداشته باشه!!! Blush
اگه از شیئی که میسازین (در اینجا adapter) استفاده دیگری ندارین، لازم نیست توی متغیر بگذارین و اتفاقاً بهتره همونجا داخل متد ایجادش کنید تا بعد از تعریف و خارج شدن از Scope از بین بره.
(26-03-1394، 01:33 ق.ظ)ADMIN نوشته: [ -> ]اگه از شیئی که میسازین (در اینجا adapter) استفاده دیگری ندارین، لازم نیست توی متغیر بگذارین و اتفاقاً بهتره همونجا داخل متد ایجادش کنید تا بعد از تعریف و خارج شدن از Scope از بین بره.

بله دقیقا همینطوره ، حق با شماست
منتهی من اشاره کردم اول همون پست که اول دوستان با متغیرش آشنا بشن بعد از این روش استفاده کنن تا گیج نشن چون فکر میکنم خیلیا هنوز آشنایی کامل با آندروید ندارن
ممنون که به این بخش سر میزنید
Heart
خوب رسیدیم به اینکه اولا لیست جدید را رفرش کنیم یعنی به محض هر تغییری همانجا نمایش داده شود و در ضمن روی هر آیتمی از لست که برویم همان آیتم انتخاب شود
تا بتوانیم عمل مورد نظر خودمان را اعمال کنیم

برای این منظور بخشی که مربوط به نمایش لیست میباشد را در متد جدیدی به نام ()Refresh  قرار دادم تا بعد از هر تغییری صداش بزنم ودرجا تغییر نمایش داده بشه
از طرفی برای اینکه آیتم انتخاب شده را داشته باشیم یک ایونت برای کلیک روی لیستمون تعریف میکنیم تا روی هر آیتمی که بودیم اول اونو در بالا نمایش بده بعد یواشکی id اونو
بر میداریم تا در روی کلیدی که انتخاب میکنیم استفاده کنیم
چطوری ؟ اینم کدش
public void Refresh()
{
   int i = 0;
   db.open();
   Cursor c = db.getAllContacts();

   String rows[] = new String[c.getCount()];
   if (c.moveToFirst()) {
       do {
           rows[i++] = DisplayContact©;
       } while (c.moveToNext());
   }

   db.close();

   final ListView lstView = getListView();

   lstView.setOnItemClickListener(new OnItemClickListener() {

       @Override
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
           String s = lstView.getItemAtPosition(arg2).toString();
           String rg[];
           rg = s.split("   ");
           EditText et1 = (EditText) findViewById(R.id.editText1);
           EditText et2 = (EditText) findViewById(R.id.editText2);
           et1.setText(rg[1]);
           et2.setText(rg[2]);
           current_id = Long.valueOf(rg[0]);
       }
   });
   setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, rows));
}

ودر آخر هم در کد ویرایش وتغییر هم به جای 1 از همین متغییر current_id که در کلاس MainActivity  از نوع Long تعریفش کردیم استفاده میکنیم
کار این برنامه دیگر تمام است اگر تمایل داشتید برای شکیلتر شدن آن بیشتر کار کنیم وآن را گسترش دهیم وگرنه در حد یک دفتر تلفن کوچک برای یادگیری کار با دیتابیس ها همین اندازه کفایت میکند.
صفحات: 1 2