استفاده از LIST VIEWها برای نمایش لیست های طولانی

بسم الله الرحمن الرحیم

استفاده  از LIST VIEWها  برای نمایش لیست های  طولانی

فصل چهارم-بخش دوم

استفاده  از LIST VIEWها  برای نمایش لیست های  طولانی 

listViewها  View ی میباشند که به شما امکان نمایش لیستی  از آیتم هارا می دهد. در  اندروید 2 نوع  از ListView ها وجود دارد: ListView and SpinnerView   .  در  ادامه هر کدام رابامثال شرح  می دهیم.

 

 ListView

Listiew   ایتم ها رابه صورت عمودی و با  امکان اسکرول کردن   نمایش می دهد.

یک پروژه جدید  به نام BasicViews5.  ایجاد کنید.

فایل asicViews5Activity.java  رابه صورت  زیر تغییر دهید


package com.MehrdadJavidi.BasicViews5;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class BasicViews5Activity extends ListActivity {
String[] presidents = { "Dwight D. Eisenhower", "John F. Kennedy",
"Lyndon B. Johnson", "Richard Nixon", "Gerald Ford",
"Jimmy Carter", "Ronald Reagan", "George H. W. Bush",
"Bill Clinton", "George W. Bush", "Barack Obama" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** ---no need to call this---*/
/** setContentView(R.layout.main);*/
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, presidents));
}
public void onListItemClick(ListView parent, View v, int position, long id) {
Toast.makeText(this, "You have selected " + presidents[position],
Toast.LENGTH_SHORT).show();
}
}

برنامه رااجرا کنید  ویک ایتم از لیست انتخاب کنید

List View  در اندروید

توضیحات

اولین چیزی که بایدتوجه کنید   این است که کلاس BasicViews5Activity   از کلاس پایه ListActivity  مشتق (extend)شده است.

ListActivity  از کلاس پایه Activity مشتق شده است و ListActivity   یک  لیست  از آیتم ها را که  به وسیله  دادن  منبع  داده (Data Source)  به آن داده می شود  نمایش  میدهد.همچنین   باید بدانید که نیاز به تغییر فایل main.xml    که شامل یک ListView نمی باشد کلاس ListActivity  خودش دارای  یک  ListView ‌میباشد.  در  نتیجه   شما نیاز ندارید که در متد onCreate()  متد  setContentView() رافراخوانی  و Ui  را که فایل main.xml  به آن اختصاص بدهید.

/**---no need to call this---*/
/**setContentView(R.layout.main);*/

در متد onCreate()   شما متد setListAdapter() را  برای نمایش  داده های درlistiew  استفاده می کنید.

setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, presidents));

متد onListItemClick()  زمانی  که بر روی  یک آیتم کلیک می شودفراخوانی میشود.

public void onListItemClick(
ListView parent, View v, int position, long id)
{
Toast.makeText(this,
"You have selected " + presidents[position],
Toast.LENGTH_SHORT).show();
}

سپس شما  نام رئیس  جمهور را  با کلاس Toast‌نمایش  می دهید.

به پروژه BasicViews5 رفته  و دستوارت زیر را به فایل BasicViews5Activity.java  اضافه نمایید


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**---no need to call this---*/
/**setContentView(R.layout.main);*/
/**---no need to call this---*/
/**setContentView(R.layout.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, presidents));
}

برنامه را اجرا کنید

List Viewدر اندروید

شما می توانی هرآیتم راانتخاب نمایید

توضیحات

شما بابرنامه نویسی به  یک شی ListView  اشاره می کنید,  ومتد getListView()  را استفاه می کنید که list view  مربوط به  ListActivity  را بر می گراند   ودر شی  ListView  قرار  می دهد.شمابا برنامه نویسی می توانیدرفتار  ListView راتغیر. دهید با متد setChoiceMode()  تعیین می کنیدکه در کدام حالت  قرار گیرد  که شما با  دادن ListView.CHOICE_MODE_MULTIPLE  به آن  امکان انتخاب چندآیتم را داده اید.

ListView lstView = getListView();
/**lstView.setChoiceMode(ListView.CHOICE_MODE_NONE);*/
/**lstView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);*/
lstView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

بسیار جالب است که شما می توانید   امکان  Filterرا به listView بدهید. شما می توانید  با  متد  setTextFilterEnabled()  اینکار را  انجا م دهید.زمانی در لیست   شروع به تایپ کردن می  کنید انهای که با  متن تایپ شده برابر میباشد را فیلتر می کند.

lstView.setTextFilterEnabled(true);

List View  در اندروید

درمثال قبل   شماه   مشاهده  می کنید  که لیست   اسامی "رئیس  جمهور ها " در یک   آرایه ذخیره کردهایم. در    برنامه  های  واقعی   شما باید    داده ها  را   از    دیتابیس     یا  از  فایل strings.xml  بخوانید 

در زیر مثالی  را  با strings.xml    شرح    می  دهیم

پروژهBasicViews5  را  که  اخیرا  ایجاد کره  اید  در فایل strings.xml    را که درمسیرres/values  می باشد   به   شکل  زیر  تغییر  دهید

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">BasicViews5</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="presidents_array">
<item>Dwight D. Eisenhower</item>
<item>John F. Kennedy</item>
<item>Lyndon B. Johnson</item>
<item>Richard Nixon</item>
<item>Gerald Ford</item>
<item>Jimmy Carter</item>
<item>Ronald Reagan</item>
<item>George H. W. Bush</item>
<item>Bill Clinton</item>
<item>George W. Bush</item>
<item>Barack Obama</item>
</string-array>
</resources>

فایل BasicViews5Activity.java  به صورت زیر تغییر دهید.


package com.MehrdadJavidi.basicviews5;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String[] presidents;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**---no need to call this---*/
/**setContentView(R.layout.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);
presidents =
getResources().getStringArray(R.array.presidents_array);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, presidents));
}
public void onListItemClick(
ListView parent, View v, int position, long id)
{
Toast.makeText(this,
"You have selected " + presidents[position],
Toast.LENGTH_SHORT).show();
}
}
}

برنامه  را با  f11 اجرا  کنید

توضیحات

 ما   ابتدا اسامی  رئیس جمهور strings.xml  را  در  فایل   ذخیره  کرده ایم

شما  می  توانید  آن را  با متدgetResources() را  بدست  آورید. 


presidents =
getResources().getStringArray(R.array.presidents_array);

 به طور  کلی شما  می  توانید  منابع   ذخیره  شده درفایل  string.xml با متدgetResources() بدست آورید.

 در مثلا زیر به شما شرح می دهیم  که  چگونه می  توانید داده های   انتخاب  شده  در  LsitViewرا تشخیص دهید. و در آخر هم آنهای  که انتخاب شده اند را  مشاهده  کنید.

به  پروژه BasicViews5 رفته   و  فایلmain.xml   به صورت  زیر  تغیرر  دهید

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Show selected items" />
<ListView
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

فایل BasicViews5Activity.java  به صورت  زیر  تغییر  دهید.


package com.MehrdadJavidi.basicviews5;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String[] presidents;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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);
presidents =
getResources().getStringArray(R.array.presidents_array);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, presidents));
}
public void onListItemClick(
ListView parent, View v, int position, long id)
{
Toast.makeText(this,
"You have selected " + presidents[position],
Toast.LENGTH_SHORT).show();
}
public void onClick(View view) {
ListView lstView = getListView();
String itemsSelected = "Selected items: \n";
for (int i=0; i<lstView.getCount(); i++) {
if (lstView.isItemChecked(i)) {
itemsSelected += lstView.getItemAtPosition(i) + "\n";
}
}
Toast.makeText(this, itemsSelected, Toast.LENGTH_LONG).show();
}
}

برنامه  رااجرا کنید. سپس   ایتم  ها  ی  را  از  لیست انتخاب  کنید  سپس   بر روی  دکمهShow selected items کلیک منید.

توضیحات

در مثلا  های قبلی   مشاهده  کردید ایتم های  در  خود actibviy نمایش  می ادیم   و  نیاز به  اضافه کردن  عنصر <ListView> به فایل main.xmlنمی باشد   در مثال  می بینید  که  listView  قسمتی از activity  می باشد   و نیاز  داریم عنصر<ListView> اضافه  کنیم.

<ListView
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

سپس ui مربوط به activity   را  بااستفاده  ازsetContentView()  به آن می  دهیم.


setContentView(R.layout.main);

برای  پیدا   این که    کدام عناصر   در  ListView    انتخاب شده است. از  متدisItemChecked() استفاده  می  کنیم.

for (int i=0; i<lstView.getCount(); i++) {
if (lstView.isItemChecked(i)) {
itemsSelected += lstView.getItemAtPosition(i) + "\n";
}
}
Toast.makeText(this, itemsSelected, Toast.LENGTH_LONG).show();
}

getItemAtPosition مقدار  ایتم  انتخاب شده را  بر اساس مکان  داده شده بر می  گر داند می  گرداند

Spinner View

Spinner  View برای  نمایش لیستی ار  آیتم ها  در  یک activity  استفاده  می  شودزمانی  های وجود دراد   که شمامی خواهید   که  لیستی ار  ایتم های نمایش دهید ولی نمی خواهید مانند  List View  کل فضای صفحه را  در برگیرد      در  این  موارد از  استفاده SpinnerView. می  شود. SpinnerView  درهر  لحضه    فقط  یک  آیتم از لیست  را  نمایش می  دهد.

در زیرSpinnerView  را با  یک  مثال شرح می دهیم.

 

پروژه جدیدبه نام ایجاد  BasicViews6. کنید

فایل main.xml را بهصورت  زیر  تغییر دهید.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true" />
</LinearLayout>

و فایل string.xml را بهصورت زیر تغییر دهید.


<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">BasicViews6</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="presidents_array">
<item>Dwight D. Eisenhower</item>
<item>John F. Kennedy</item>
<item>Lyndon B. Johnson</item>
<item>Richard Nixon</item>
<item>Gerald Ford</item>
<item>Jimmy Carter</item>
<item>Ronald Reagan</item>
<item>George H. W. Bush</item>
<item>Bill Clinton</item>
<item>George W. Bush</item>
<item>Barack Obama</item>
</string-array>
</resources>

وفایلءMaionActivity.java  بهصورت زیر تغییر  دهید 

package com.MehrdadJavidi.basicviews6;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
String[] presidents;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
presidents =
getResources().getStringArray(R.array.presidents_array);
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, presidents);
s1.setAdapter(adapter);
s1.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0,
View arg1, int arg2, long arg3)
{
int index = arg0.getSelectedItemPosition();
Toast.makeText(getBaseContext(),
"You have selected item : " + presidents[index],
Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) { }
});
}
}

برنامه  را بازدن F1اجرا کنید  و سپس بر رویSpinnerView کلیک کنید

دقیقا  شبیهListView. می باشد و با یک   متد اضافی به نام onNothingSelected() که شماباید به کار ببرید

این  متد  زمانی  که دکمه back button زده می شود  اجرا می  شود.زمانی  که  لیست  ایتم ها نمایش داده  می شود  و  شما  ایتمی را انتخاب نمی کنید.

 

به جای  نمایش آیتم ها  درArrayAdapter   به عنوان  یک لیست ساده  شما   شما   می توانید آن  ها به صورت radio buttons نمایش  دهید برای  این کار شما  پارامتر ArrayAdapter را  به  صورت زیر تغییر  دهید

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, presidents);

Combo Box  در اندروید

نظرات (۰)

هيچ نظري هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی