در قسمت سی و یکم آموزش اندروید در رابطه با شی های لیستی که شامل ListView و SpinnerList میباشد توضیح داده ایم و شی ListView را به طور کامل توضیح داده ایم و در آموزش بعد SpinnerList را مفصل آموزش خواهیم داد.
ابزارهای نمایش لیستی این قابلیت را به ما میدهد تا لیست های طولانی از گزینه هارا نمایش دهیم. در اندروید دو نوع ابزار نمایش لیستی وجود دارد که شامل ListView و SpinnerView میباشد هر دو این ابزار برای نمایش لیست های طولانی مناسب است.
ابزار نمایش ListView یک لیست از گزینه ها رادر حالت عمودی و با قابلیت scroll شدن نمایش میدهد.برای درک بیشتر به تمرین زیر دقت کنید
پروژه جدیدی بانام View5Prj ایجاد کرده و در فایل MainActivity.java چنین کدنویسی کنید
package com.example.view5prj; import android.os.Bundle; import android.app.ListActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { String[] city = { "Shiraz", "Esaan", "Tehran", "Tabriz", "Yazd", "Mashhad", "Gilan", "Kerman" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //--no need to call this //setContentView(R.layout.activity_main); setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, city)); } public void onListItemClick(ListView parent,View v, int position, long id) { Toast.makeText(this, "You have selected " + city[position], Toast.LENGTH_SHORT).show(); } }
برنامه را اجرا کرده ولیستی از شهرهایی که به صورت آرایه تعریف کرده ایم را ببینید و خواهید دید با انتخاب هرکردام از آنها پیغام مناسب نمایش داده میشود.
نکته قابل توجه در این مثال این است که کلاس MainActivity.java کلاس ListActivity را بسط میدهد.کلاس ListActivity نیز کلاس Activity را بسط میدهد
public class MainActivity extends ListActivity {
همچنین دقت کنید که هم اکنون نیاز به هیچ تغییری در فایل xml برنامه نمیباشد کلاس ListActivity خود شامل یک ListView میباشد از این رو متد ()onCreate نیازی به فراخوانی ()setContentView برای بارگذاری رابط کاربری از فایل activity_main.xml نیست:
//--no need to call this //setContentView(R.layout.activity_main);
در متد ()onCreate از متد ()setListAdapter برای پر کردن کل صفحه نمایش از یک ListView در زمان اجرا استفاده میکنیم. شی ArrayAdapter آرایه ای از رشته ها را که قرار است در ListView نمایش داده شوند مدیریت میکند.در مثال بالا ListView را حالت نمایش simple_list_item_checked تنظیم کردیم
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, city));
وقتی که یکی از آیتم های لیست کلیک میشود متد onListItemClick() فراخوانی میگردد
public void onListItemClick(ListView parent,View v, int position, long id) { Toast.makeText(this, "You have selected " + city[position], Toast.LENGTH_SHORT).show(); }
این ابزار یک ابزار همه کاره است میتوان در جاهای زیادی با فیلتر های مختلف از آن استفاده کرد برای مثال در مثال زیر این قابلیت را به ما میدهد تا چندین گزینه را با هم انتخاب کنیم.
فایل جاوا پروژه قبل را بدین صورت تغییر دهید تا بتوان چندین گزینه را باهم انتخاب کنیم
package com.example.view5prj; import android.os.Bundle; import android.app.ListActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { String[] city = { "Shiraz", "Esaan", "Tehran", "Tabriz", "Yazd", "Mashhad", "Gilan", "Kerman" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //--no need to call this //setContentView(R.layout.activity_main); ListView lstview = getListView(); //lstview.setChoiceMode(ListView.CHOICE_MODE_NONE); //lstview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lstview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); lstview.setTextFilterEnabled(true); setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, city)); } public void onListItemClick(ListView parent,View v, int position, long id) { Toast.makeText(this, "You have selected " + city[position], Toast.LENGTH_LONG).show(); } {
برنامه را اجرا کنید و چند گزینه را انتخاب کنید تا آیکون چک را ببینید همچنین با انتخاب هرگزینه پیغام Toast را ببنید
برای اینکه در زمان اجرا به شی ListView دسترسی داشته باشیم از متد getListView() استفاده کنیم که ListActivity ابزار ListView را برمیگرداند. برای اینکه بتوان در زمان اجرا رفتار ListView را کنترل کنید باید ابتدا به روش بالا به آن دسترسی پیدا کنید در این مورد از متد setChoiceMode() برای تعریف نحوه کنترل کلید کاربر استفاده کردیم برای این مثال حالت (ListView.CHOICE_MODE_MULTIPLE را تنظیم کردیم که بدین معنی است که بتوان چندین گزینه را انتخاب کنیم
علاوه بر این حالت میتوان از حالات زیر نیز استفاده کرد
CHOICE_MODE_NONE : لیست عادی که انتخاب را نشان نمیدهد.
CHOICE_MODE_SINGLE :لیستی که تنها اجازه یک انتخاب را میدهد.
TRANSCRIPT_MODE_ALWAYS_SCROLL : این لبست به طور اتوماتیک به پایین حرکت میکند بدون توجه به این که آیتم ها visible هستند یا نه.
TRANSCRIPT_MODE_DISABLED : حالت متن غیر فعال
ListView lstview = getListView(); //lstview.setChoiceMode(ListView.CHOICE_MODE_NONE); //lstview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lstview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
گرچه در فایل بالا از آرایه استفاده کرده اما در عمل بهتر است که از پایگاه داده و یا فایل string.xml استفاده کنیم به همین دلیل همین تمرین را با استفاده از فایل string.xml که در مسیر res\values قراردارد انجام میدهیم.
در فایل string.xml در مسیر res\values آرایه را بدین صورت وارد میکنیم
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">View5Prj</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string-array name="city_array"> <item>Shiraz</item> <item>Mashhad</item> <item>Tehran</item> <item>Tabriz</item> <item>Ilam</item> <item>Ahvaz</item> <item>BandarAbbas</item> <item>Amol</item> </string-array> </resources>
حال عبارت های پررنگ شده را به فایل MainActivity.java اضافه میکنیم
package com.example.view5prj; import android.os.Bundle; import android.app.ListActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { String[] city ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //--no need to call this //setContentView(R.layout.activity_main); ListView lstview = getListView(); lstview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); lstview.setTextFilterEnabled(true); city = getResources().getStringArray(R.array.city_array); setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, city)); } public void onListItemClick(ListView parent,View v, int position, long id) { Toast.makeText(this, "You have selected " + city[position], Toast.LENGTH_LONG).show(); } }
برنامه را اجرا کرده و آِرایه ای را که در فایل string.xml تعریف کردید را ببینید
در عبارات زیر نیز با استفاده از ()getStringArray درون ()getResoutces به آرایه ای که در فایل string.xml ایجاد کردیم با استفاده از آی دی تعیین شده دسترسی پیدا خواهیم کرد و آن را درون متغیر دیگری از نوع آرایه میریزیم
city = getResources().getStringArray(R.array.city_array);
نام هایی را که در فایل string.xml قرار دادیم را با استفاده از متد ()getResources استخراج میکنیم
city = getResources().getStringArray(R.array.city_array);
متد زیر نیز هنگام انتخاب هرکدام از عناصر لیست فراخوانی میشود
public void onListItemClick(ListView parent,View v, int position, long id)