下面是针对于“Android中Fragmen首选项使用自定义的ListPreference的方法”的完整攻略,并且给出两个示例说明。
步骤1:新建一个自定义的ListPreference
- 在res/xml文件夹下创建一个名为preferences.xml的xml文件,用于存放自定义的ListPreference。
- 在preferences.xml文件中添加以下代码:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:key="list_preference"
android:title="List Preference"
android:summary="Select an item from the list"
android:entries="@array/list_entries"
android:entryValues="@array/list_entry_values"
android:defaultValue="@string/list_default_value"/>
</PreferenceScreen>
在这个ListPreference中,我们定义了key、title、summary等属性。其中entries和entryValues分别对应可选项中的显示文本以及对应的值。defaultValue定义了默认的选项。
步骤2:在Fragment中添加PreferenceScreen
- 在Fragment的onCreateView方法中添加以下代码,用来加载preference.xml文件:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_preferences, container, false);
addPreferencesFromResource(R.xml.preferences);
return rootView;
}
addPreferencesFromResource()方法能够根据传入的资源ID来解析preference.xml文件,并且将解析结果展示在Fragment中。
- 在FragmentActivity中加载Fragment:
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new PreferencesFragment()).commit();
}
}
这里我们通过getSupportFragmentManager()方法来获取Fragment的实例,然后将它添加到activity_main布局文件中。
示例1
以上两个步骤就是如何实现在Fragment中使用自定义的ListPreference了,下面是一个简单的示例,使用SharedPreferences来存储用户的选择。
public class PreferencesFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences sharedPreferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onResume() {
super.onResume();
// 注册SharedPreferences的监听器
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
// 注销SharedPreferences的监听器
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// 当Preference的值改变时,将新的值保存到SharedPreferences中
if (key.equals("list_preference")) {
String value = sharedPreferences.getString(key, "");
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("list_preference", value);
editor.apply();
}
}
}
在上面的代码中,我们注册了SharedPreferences的监听器,当Preference的值改变时,我们将新的值保存在SharedPreferences中。这里我们只监听了一个自定义的ListPreference,当其他Preference的值改变时,我们同样可以在onSharedPreferenceChanged方法中对其进行处理。
示例2
这个示例中,我们同样使用SharedPreferences来存储用户的选择,不过我们在Fragment中使用了一个自定义的偏好设置项,替换了原来的ListPreference。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="checkbox_preference"
android:title="CheckBox Preference"
android:summary="Select this to enable some feature"
android:defaultValue="false"
android:widgetLayout="@layout/custom_checkbox_preference"/>
</PreferenceScreen>
在这个CheckBoxPreference中,我们使用了widgetLayout属性来引用了一个自定义的布局文件,用于展示这个偏好设置项。
自定义布局文件custom_checkbox_preference.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
<CheckBox
android:id="@android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true" />
</RelativeLayout>
在这个布局文件中,我们使用了一个TextView和一个CheckBox来展示这个偏好设置项。TextView用于展示标题,CheckBox用于展示选中状态。
在Fragment中实现以上代码和SharedPreferences监听的逻辑即可完成这个示例。
希望这个攻略能够帮到你,任何问题都可以随时问我哦~
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中Fragmen首选项使用自定义的ListPreference的方法 - Python技术站