Android中Fragment子类及其PreferenceFragment的创建过程演示

Android中Fragment子类及其PreferenceFragment的创建过程演示


这篇文章主要介绍了Android中Fragment子类及其PreferenceFragment的创建过程演示,PreferenceFragment用来保存Fragment的选项设置,需要的朋友可以参考下

Fragment创建方式
Fragment有两种使用方式:静态方式 和 动态方式。
1. 静态方式
第一步:先定义一个Fragment子类。

?
1
2
3
4
5
6
7
8
public class ExampleFragment extends Fragment {
 
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
     return inflater.inflate(R.layout.example_fragment, container, false );
  
}

说明:ExampleFragment是Fragment的子类,它的布局定义是example_fragment.xml文件。
第二步:定义Fragment子类对应的布局文件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
   xmlns:tools = "http://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   android:orientation = "horizontal" >
 
   < EditText android:id = "@+id/edit_message"
     android:layout_width = "0dp"
     android:layout_height = "wrap_content"
     android:layout_weight = "1"
     android:hint = "@string/edit_message" />
 
   < Button
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "@string/button_send"
     android:onClick = "sendMessage" />
 
</ LinearLayout >

说明:上面是example_fragment.xml的内容。
第三步:在需要用到该Fragment的Activity对应的布局中使用该Fragment。
下面是引用Fragment的Activity的代码:

?
1
2
3
4
5
6
7
8
9
10
public class FragmentLayoutTest extends Activity
{
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
     super .onCreate(savedInstanceState);
     setContentView(R.layout.main);
   }
}

下面是main.xml的内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<? 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"
   >
   < TextView
     android:layout_width = "fill_parent"
     android:layout_height = "wrap_content"
     android:text = "@string/fragment_intro"
     />
 
   < fragment android:name = "com.skw.fragmentlayouttest.ExampleFragment"
     android:id = "@+id/frag_example"
     android:layout_weight = "1"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent" />
 
</ LinearLayout >

说明:在该布局文件中通过调用了先前自定义的ExampleFragment。
点击查看:静态方式的完整源码
2. 动态方式
重复"上面的第一步和第二步",实现一个Fragment子类。
第三步:在需要用到该Fragment的Activity对应的布局中使用定义一个FrameLayout。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<? 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"
   >
 
   < TextView
     android:layout_width = "fill_parent"
     android:layout_height = "wrap_content"
     android:text = "@string/fragment_intro"
     />
 
   < FrameLayout
     android:id = "@+id/frag_example"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent" />
 
</ LinearLayout >

第四步:在Activity中将Fragment填充到FrameLayout中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class FragmentLayoutTest extends Activity {
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super .onCreate(savedInstanceState);
     setContentView(R.layout.main);
 
     // 获取FragmentManager
     FragmentManager fragmentManager = getFragmentManager();
     // 获取FragmentTransaction   
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
 
     // 获取ExampleFragment
     ExampleFragment fragment = new ExampleFragment();
     // 将fragment添加到容器frag_example中
     fragmentTransaction.add(R.id.frag_example, fragment);
     fragmentTransaction.commit();
   }
}

PreferenceFragment使用说明
1. 创建配置文件
新建res/xml/preferences.xml,内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
< PreferenceScreen xmlns:android = "http://schemas.android.com/apk/res/android" >
 
   < PreferenceCategory
     android:title = "PreferenceCategory A" >
 
     <!--
      (01) android:key是Preferece的id
      (02) android:title是Preferece的大标题
      (03) android:summary是Preferece的小标题
      -->
     < CheckBoxPreference
       android:key = "checkbox_preference"
       android:title = "title_checkbox_preference"
       android:summary = "summary_checkbox_preference" />
 
   </ PreferenceCategory >
 
   < PreferenceCategory
     android:title = "PreferenceCategory B" >
 
     <!--
      android:dialogTitle是对话框的标题
      android:defaultValue是默认值
      -->
     < EditTextPreference
       android:key = "edittext_preference"
       android:title = "title_edittext_preference"
       android:summary = "null"
       android:dialogTitle = "dialog_title_edittext_preference"
       android:defaultValue = "null" />
 
     <!--
      android:entries是列表中各项的说明
      android:entryValues是列表中各项的值
      -->
     < ListPreference
       android:key = "list_preference"
       android:dialogTitle = "Choose font"
       android:entries = "@array/pref_font_types"
       android:entryValues = "@array/pref_font_types_values"
       android:summary = "sans"
       android:title = "Font"
       android:defaultValue = "sans" />
   </ PreferenceCategory >
 
 
   < PreferenceCategory
     android:title = "PreferenceCategory C" >
 
     < SwitchPreference
       android:key = "switch_preferece"
       android:title = "title_switch_preferece"
       android:defaultValue = "true" />
 
     < SeekBarPreference
       android:key = "seekbar_preference"
       android:title = "title_seekbar_preference"
       android:max = "100"
       android:defaultValue = "30" />
 
   </ PreferenceCategory >
 
</ PreferenceScreen >

说明:PreferenceFragment的组件很多,包括CheckBoxPreference, EditTextPreference, ListPreference, SwitchPreference, SeekBarPreference, VolumePreference等。这些组建的属性定义如下。
(01) android:key是Preferece的id,它是Preferece的唯一标识。
(02) android:title是Preferece的大标题。
(03) android:summary是Preferece的小标题。
(04) android:dialogTitle是对话框的标题。
(05) android:defaultValue是默认值。
(06) android:entries是列表中各项的说明。
(07) android:entryValues是列表中各项的值。
注意:SwitchPreference是API 14(Android4.0)才支持的。所以,要想使用SwitchPreference的话,必须在manifest中定义apk支持的最小版本。
<uses-sdk android:minSdkVersion="14" />
2. 自定义PreferenceFragment

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
public class PrefsFragment extends PreferenceFragment
   implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener {
   private static final String TAG = "##PrefsFragment##" ;
 
   private static final String CHECK_PREFERENCE  = "checkbox_preference" ;
   private static final String EDITTEXT_PREFERENCE = "edittext_preference" ;
   private static final String LIST_PREFERENCE   = "list_preference" ;
   private static final String SWITCH_PREFERENCE  = "switch_preferece" ;
   private static final String SEEKBAR_PREFERENCE = "seekbar_preference" ;
 
   private Preference mEditText;
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super .onCreate(savedInstanceState);
 
     // Load the preferences from an XML resource
     addPreferencesFromResource(R.xml.preferences);
 
     mEditText = (Preference) findPreference(EDITTEXT_PREFERENCE);
     mEditText.setOnPreferenceClickListener( this );
   }
 
   @Override
   public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
     // Set summary to be the user-description for the selected value
     Preference connectionPref = findPreference(key);
     if (key.equals(CHECK_PREFERENCE)) {
       boolean checked = sharedPreferences.getBoolean(key, false );
       Log.d(TAG, "CheckBox: checked=" +checked);
     } else if (key.equals(EDITTEXT_PREFERENCE)) {
       String value = sharedPreferences.getString(key, "" );
       connectionPref.setSummary(value);
       Log.d(TAG, "EditText: value=" +value);
     } else if (key.equals(LIST_PREFERENCE)) {
       String value = sharedPreferences.getString(key, "" );
       connectionPref.setSummary(value);
       Log.d(TAG, "List: value=" +value);
     } else if (key.equals(SWITCH_PREFERENCE)) {
       boolean checked = sharedPreferences.getBoolean(key, false );
       Log.d(TAG, "Switch: checked=" +checked);
     } else if (key.equals(SEEKBAR_PREFERENCE)) {
       int value = sharedPreferences.getInt(key, 0 );
       Log.d(TAG, "Seekbar: value=" +value);
     }
   }
 
   @Override
   public boolean onPreferenceClick(Preference preference) {
     SharedPreferences sharedPreferences = preference.getSharedPreferences();
     String value = sharedPreferences.getString(preference.getKey(), "" );
     Log.d(TAG, "onPreferenceClick: value=" +value);
 
     return true ;
   }
 
   @Override
   public void onResume() {
     super .onResume();
     getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener( this );
 
   }
 
   @Override
   public void onPause() {
     getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener( this );
     super .onPause();
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值