در قسمت سی و پنجم آموزش اندروید در ادامه آموزش زیر کلاس های کلاس فرگمنت ، زیر کلاس PreferencesFragment را آموزش داده ایم.
معمولا در برنامه های اندروید این قابلیت داده میشود تا بتوانند برنامه به سلیقه و میل خود درآورده شودبه همین دلیل میتوان این قابلیت را به کاربر اندروید داد تا با ویژگی هاو ابزار هایی که توسط برنامه نویس تهیه و تنظیم شده تغییراتی را ایجاد و ذخیره کند.در اندروید ۳ به بالا از کلاس preferenceFragment هم برای انجام چنین کاری میتوان بهره برد.برای درک بیشتر به مثال زیر دقت فرمایید
پروژه جدیدی بانام PreferenceFragmentPrj ایجاد کنید و یک فولدر جدیدی با نام xml ایجاد کنید سپس فایل xml با نام preferences.xml ایجاد کنید. پس از ایجاد فایل xml خواهید دید این فایل به صورت اتوماتیک درون فایل res/layout قرار میگیرد پس این فایل را درگ کرده و درون فولدر xml را که ایجاد کرده اید قرار دهید
حال فایل preferences.xml را کلیک کرده و در زبانه Structure گروه ابزاری که احتمالا LinearLayout است و در بخش Xml Elements نمایش داده میشود را باید Remove کرده و دکمه Add را زده و مطابق تصویر زیر گزینه PreferenceScreen را انتخاب میکنیم
حال این بخش به شکل زیر درخواهدآمد
سپس به زبانه xml رفته و درون آن ابزارهایی را چنین کدنویسی و ایجاد میکنیم
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Category 1"> <CheckBoxPreference android:title="Checkbox" android:defaultValue="false" android:summary="True of False" android:key="checkboxPref" /> </PreferenceCategory> <PreferenceCategory android:title="Category 2"> <EditTextPreference android:name="EditText" android:summary="Enter a string" android:defaultValue="[Enter a string here]" android:title="Edit Text" android:key="editTextPref" /> <RingtonePreference android:name="Ringtone Preference" android:summary="Select a ringtone" android:title="Ringtones" /> </PreferenceCategory> </PreferenceScreen>
حال فایل جاوایی در بخش src بانام Fragment1 ایجاد کرده ودرون آن چنین کدنویسی کنید
package com.example.preferencesfragmentprj; import android.os.Bundle; import android.preference.PreferenceFragment; public class Fragment1 extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //--load the preference from an xml file-- addPreferencesFromResource(R.xml.prefernces); } }
که همانگونه که مشخص شده برای بارگذاری فایل xml از تابع addPreferenceFromResource استفاده کرده ایم و از آن طریق نیز به فولدر xml و سپس فایل preferences
در انتها نیز در فایل MainActivity.java نیز چنین کدنویسی میکنیم
package com.example.preferencesfragmentprj; import android.app.Activity; import android.os.Bundle; import android.app.FragmentTransaction; import android.app.FragmentManager; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm= getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment1 fragment1= new Fragment1(); ft.replace(android.R.id.content, fragment1); ft.addToBackStack(null); ft.commit(); } }
سپس برنامه را اجرا کرده و خواهید دید فرگمنت Preference را نمایش میدهد که حاوی لیستی از ابزار هاست
زمانی که کلید Edit Text کلیک شود یک پنجره باز خواهد شد که مشخصه defaultValue رامیتوان دید
با کلیک کردن بروی کلید RingTones که همان مشخصه title است نیز پنجره مربوط باز خواهد شد
برای اینکه یک لیست از تنظیمات در اندروید ایجاد کنیم ابتدا میبایستی فایل preferences.xml ایجاد شود سپس هر تنظیم را به عنوان یک عنصردر فایل xml ایجاد میکنیم.
برای بارگذاری فایل تنظیمات در فرگمنت تنظیمات از متد ()addPreferenceFromResource استفاده میکنیم و آدرس فایل xml حاوی تنظیمات راخواهیم داد
{ super.onCreate(savedInstanceState); //--load the preference from an xml file-- addPreferencesFromResource(R.xml.prefernces); }
وبرای نمایش فرگمنت تنظیمات در اکتیویتی میتوانید از کلاس FragmentManager استفاده کنید
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm= getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment1 fragment1= new Fragment1(); ft.replace(android.R.id.content, fragment1); ft.addToBackStack(null); ft.commit();
در عبارات فوق ابتدا یک شی از نوع FragmentManager که همانگونه که در آموزش قبل گفته شد برای ارتباط برقرار کردن با فرگمنت است ایجادشده سپس یک شی از نوع FragmentTransaction که با استفاده از beginTransactionn اقدام به شروع یک سری عملیات ویرایش بر روی قطعات مرتبط با این FragmentManager میکند.
عبارت ft.replace برای جایگزین کردن فرگمنت جاری که به container اضافه شده. عبارت addToBackStack نیز یعنی این تراکنش یا عملیات را به backstack منتقل کن به عبارت دیگر عملیات بعد از commit شدن نیز نگهداری میشود .
یک Commit بلافاصله اتفاق نمی افتد بلکه آن را به عنوان کار برنامه ریزی شده بر روی موضوع اصلی که باید انجام شود دفعه بعد که موضوع آماده است.