در قسمت سی و سوم آموزش اندروید در رابطه با زیر کلاس های فرگمنت ها که شامل ListFragment , DialogFragment , PreferenceFeragment توضیح داده ایم و مثالی که کلاس ListFragment را بسط دهد را آموزش داده ایم.
در آموزش های قبل دررابطه با فرگمنت ها و تارخچه آن آموزش دادیم و دریافتیم با استفاده از فرگمنت ها میتوان رابط کاربری را سفارشی کرده و در زمان اجرا به صورت پویا فرگمنت ها را در اکتیویتی چینش کنیم این موضوع به ما قابلیت اجرا در دستگاه های بزرگ و مختلف را میدهد.
همانطور که قبلا گفته شد فرگمنت ها اکتیویتی های کوچکی هستند که چرخه حیات مختص خود را دارند.برای ایجاد یک فرگمنت نیاز به یک کلاس دارید یک کلاس پایه فرگمنت را بسط دهد.علاوه بر کلاس پایه فرگمنت میتوان از زیرکلاس های دیگر کلاس فرگمنت برای ایجاد فرگمنت های اختصاصی استفاده کرد. در ادامه سه زیر کلاس : ListFragment و DialogFragment و PreferenceFragment را آموزش میدهیم.
یک فرگمنت لیستی در واقع یک فرگمنت حاوی یک ListView اس که لیستی از اطلاعات را از طریق یک منبع داده مثل آرایه یا یک مکان نما نمایش میدهد.یک فرگمنت لیستی بسیار پرکاربرد است.یک فرگمنت حاوی لیستی از گزینه هاست و دیگری شامل جزییات گزینه انتخاب شده.برای ایجاد یک فرگمنت لیستی باید کلاس جاوا کلاس ListFragment را بسط دهد.
برای درک بیشتر پروژه جدیدی به نام ListFragmentExample ایجاد کرده و در فایل 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="horizontal" > <fragment android:name="net.learn2develop.ListFragmentExample.Fragment1" android:id="@+id/fragment1" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="200dp" /> <fragment android:name="net.learn2develop.ListFragmentExample.Fragment1" android:id="@+id/fragment2" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="300dp" /> </LinearLayout> [/xml] سپس در فایل xml دیگری را در همان مسیر با نام fargment1 ایجاد کرده و ابزار نمایش ListView را چنین ایجاد میکنیم <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:drawSelectorOnTop="false"/> </LinearLayout>
حال باید برای فرگمنت خود یک کلاس نیز ایجاد کرده و درون آن چنین کدنویسی کنیم
package net.learn2develop.ListFragmentExample; import android.app.ListFragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class Fragment1 extends ListFragment { 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" }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment1, container, false); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents)); } public void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(getActivity(), "You have selected " + presidents[position], Toast.LENGTH_SHORT).show(); } }
حال برنامه را اجرا کرده و نتیجه را مطابق تصویر زیر مشاهده کنید
ابتدا یک فایل xml برای فرگمنت ایجاد کرده و یک عنصر ListView به آن اضافه میکنیم
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:drawSelectorOnTop="false"/> </LinearLayout>
سپس در کلاس پس از بسط دادن کلاس با کلاس ListFragment یک آرایه از اسامی را ایجاد میکنیم
public class Fragment1 extends ListFragment { 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" };
در رویداد ()onCreate از متد ()seListAdapter برای پر کردنListView از عناصر آرایه استفاده میکنیم. شی ArrayAdapter آرایه رشته هایی که در ListView نمایش داده میشوند را مدیریت میکند.در این مثال این ابزار را در حالت نمایش simple_list_item_1 تنظیم کردیم:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents));
متد onListItemClick() وقتی که یکی از گزینه های ListView کلیک شوند فراخوانی میگردد
public void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(getActivity(), "You have selected " + presidents[position], Toast.LENGTH_SHORT).show();</p> }
در نهایت هردو فرگمنت را به اکتیویتی اضافه میکنیم
<?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="horizontal" > <fragment android:name="net.learn2develop.ListFragmentExample.Fragment1" android:id="@+id/fragment1" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="200dp" /> <fragment android:name="net.learn2develop.ListFragmentExample.Fragment1" android:id="@+id/fragment2" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="300dp" /> </LinearLayout>