«

PreferenceActivity与PreferenceFragment应用

时间:2024-3-2 18:58     作者:韩俊     分类: Android


PreferenceActivity

PreferenceActivity是一个非常有用的基类,当进行选项配置时,选项设置会以参数的形式保存,用Preferences进行保存。当Activity类继承PreferenceActivity,该Activity不需要自己控制Preferencces的读写,PreferenceActivtity会为我们处理一切。PreferenceActivity与普通的Activity不同,它不再使用普通的界面布局文件,而是选用选项设置的布局文件。选项设置的布局文件以PreferenceScreen作为根元素——它表明定义一个参数设置的界面布局。

具体实例:

步骤:

1、为Preference创建xml资源,名为user_settings.xml。在res下创建xml文件夹,将user_settings.xml放在xml文件下。

2、新建一个UserSettingsActivity类继承PreferenceActivity的类,使用addPreferencesFromResource()显示user_setting.xml配置的布局

3、activity_main布局文件的配置

4、新建一个MainActivity来启动UserSettingActivity

具体配置内容如下:

1、配置user_settings.xml文件

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory>
        <EditTextPreference
                android:title="Password"
                android:summary="Set Your Password"
                android:key="prefUserPassword"/>
    </PreferenceCategory>
    <PreferenceCategory>
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="prefLockScreen"
            android:summary="Lock The Screen With Password"
            android:title="Screen Lock" />
            <ListPreference
            android:key="prefUpdateFrequency"
            android:title="Reminder for Updation"
            android:summary="Set Update Reminder Frequency"
            android:entries="@array/updateFrequency"
            android:entryValues="@array/updateFrequencyValues"
            />
    </PreferenceCategory>
</PreferenceScreen>
具体分析一上内容的含义:

1)PreferenceScreen为根元素,使用PreferenceCategory对参数选项进行分组,其它元素都是用于设置相应的参数。

2)上文包括三种类型的配置,EditTextPreference、CheckBoxPreference以及ListPreference

3)属性说明:

Title:显示标题

Key:唯一标识,SharedPreferences也将通过此key值进行数据保存,也可以通过此Key值获取保存的信息。

Summary:副标题

DefaultValue:默认值

在values中新建arrays.xml文件存放相应的值

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="updateFrequency">
      <item name="1">Daily</item>
      <item name="7">Weekly</item>
      <item name="3">Yearly</item>
      <item name="0">Never(I will Myself)</item>
  </string-array>
  <string-array name="updateFrequencyValues">
      <item name="1">1</item>
      <item name="7">7</item>
      <item name="30">30</item>
      <item name="0">0</item>
  </string-array>
</resources>

2、新建UserSettingsActivity类

public class UserSettingActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.user_settings);
    }
}


3、activity_main布局文件配置

<RelativeLayout 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:background="#CCCCFF"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/buttonSettings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="150dp"
        android:textSize="25sp"
        android:text="@string/settings" />

    <TextView
        android:id="@+id/textViewSettings"
        android:textSize="21sp"
        android:textColor="#0000FF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/buttonSettings"
        android:layout_marginTop="66dp"
        android:text="@string/NoSettings"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>


4、新建MainActivity类

public class MainActivity extends Activity {

      private static final int SETTINGS_RESULT = 1;
      Button settingButton;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);

                  Button btnSettings=(Button)findViewById(R.id.buttonSettings);
                  // start the UserSettingActivity when user clicks on Button
                  btnSettings.setOnClickListener(new View.OnClickListener() {

                      public void onClick(View v) {
                          // TODO Auto-generated method stub
                          Intent i = new Intent(getApplicationContext(), UserSettingActivity.class);
                          startActivityForResult(i, SETTINGS_RESULT);
                      }
                  });
        }

            //当一个Activity退出的时候回调该方法
          @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data)
          {
                      super.onActivityResult(requestCode, resultCode, data);

                          if(requestCode==SETTINGS_RESULT)
                          {
                              displayUserSettings();
                          }

          }

          private void displayUserSettings() 
          {
                  SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);

                  String  settings = "";

                  settings=settings+"Password: " + sharedPrefs.getString("prefUserPassword", "NOPASSWORD");

                  settings=settings+"nRemind For Update:"+ sharedPrefs.getBoolean("prefLockScreen", false);

                  settings=settings+"nUpdate Frequency: "
                          + sharedPrefs.getString("prefUpdateFrequency", "NOUPDATE");

                  TextView textViewSetting = (TextView) findViewById(R.id.textViewSettings);

                  textViewSetting.setText(settings);
           }

}
显示的结果如下:




PreferenceFragment 在Android3.0中,Android不再建议直接让PreferenceActivity加载选项设置的布局文件。所以在上述实例中UserSettingActivity中addPreferencesFromResource(R.xml.user_settings);是不推荐使用的。一般PreferenceActivity只负责加载选项设置列表的布局文件,PreferenceFragment才负责加载选项设置的布局文件。针对上述的实例用PreferenceFragment进行修改。

步骤如下:

1、为Preference创建xml资源,名为user_settings.xml。在res下创建xml文件夹,将user_settings.xml放在xml文件下。

2、新建PrefsFragment类继承PreferenceFragment类,并使用 addPreferencesFromResource()方法加载user_settings文件。

3、创建UserSettingActivity加载PrefsFragement

4、配置activity_main.xml文件

5、新建一个MainActivity来启动UserSettingActivity

具体步骤如下:

1、同上

2、新建PrefsFragment类继承PreferenceFragment类

public class PrefsFragment extends PreferenceFragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        // 从xml文件夹中加载Preferences文件
        addPreferencesFromResource(R.xml.user_settings);
    }
}
3、修改UserSettingActivity加载PrefsFragement
public class UserSettingActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content,
                new PrefsFragment()).commit();
    }
}
4、同上

5、同上

运行结果同上。



标签: android

热门推荐