android 切换 preferencefragment,Android之PreferenceFragment使用方法

PreferenceFragment

Android应用程序通常要提供首选项,以允许用户定制应用程序。

例如,可以允许用户保存那些用于访问Web资源的登录凭据, 等等。

在Android中,可以使用PreferenceActivity基类为用户显示一个用于编辑首选项的活动。

在Android 3.0和更高版本中,可以使用PreferenceFragment类实现相同的功能。// XML

// 新建 (res/xml/preferences.xml)

android:key="child_checkbox_preference"

android:summary="这是一个可见的子类"

android:title="子类复选框首选项"

android:summaryOn="已开启"

android:summaryOff="已关闭"

android:onClick="onClick"/>

// Activit

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 替换 Fragment

getFragmentManager().beginTransaction()

.replace(R.id.xxx, new MyPreference())

.commit();

}

// PreferenceFragment

class MyPreference extends PreferenceFragment {

// 监听 Preference Click

@Override

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

Log.i("INFO", preference.getKey());

// 也可以通过 KEY 获取

// findPreference("child_checkbox_preference")

if (preference.getKey().equals("child_checkbox_preference")) {

CheckBoxPreference child_checkbox_preference = (CheckBoxPreference) preference;

Toast.makeText(MainActivity.this, String.valueOf(child_checkbox_preference.isChecked()), Toast.LENGTH_SHORT).show();

}

return super.onPreferenceTreeClick(preferenceScreen, preference);

}

@Override

public void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

// 添加 Preferences XML

addPreferencesFromResource(R.xml.preferences);

// 选项监听 ...

// findPreference("child_checkbox_preference").setOnPreferenceClickListener(...);

// 选项监听 当 Preference 的值发生改变时触发该事件,true则以新值更新控件的状态,false 则 不保存

findPreference("child_checkbox_preference").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {

@Override

public boolean onPreferenceChange(Preference preference, Object newValue) {

// 返回 false 修改不会生效

return false;

}

});

/*

// 获取 Preferences Manager

PreferenceManager manager = getPreferenceManager();

// 获取 选项状态

CheckBoxPreference child_checkbox_preference = (CheckBoxPreference) manager.findPreference("child_checkbox_preference");

// ...

Toast.makeText(MainActivity.this, String.valueOf(child_checkbox_preference.isChecked()), Toast.LENGTH_SHORT).show();

*/

}

public void onClick() {

Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();

}

}

}

xmlns:android="http://schemas.android.com/apk/res/android">

android:title="显示一排偏好">

android:key="checkbox_preference"

android:title="开关偏好"

android:summary="这是一个开关按钮" />

android:title="基于对话框的偏好">

android:key="edittext_preference"

android:title="文本输入偏好"

android:summary="使用一个文本框对话框"

android:dialogTitle="输入你的宠物" />

android:key="list_preference"

android:title="列表偏好"

android:summary="使用一个列表对话框"

android:entries="@array/entries_list_preference"

android:entryValues="@array/entryvalues_list_preference"

android:dialogTitle="选择一个" />

android:title="启动偏好">

android:key="screen_preference"

android:title="屏幕"

android:summary="显示另一个偏好屏幕">

android:key="next_screen_checkbox_preference"

android:title="开关偏好"

android:summary="另一个屏幕上的偏好" />

android:title="意图偏好"

android:summary="通过意图启动一个Activity">

android:data="http://www.android.com" />

android:title="偏好属性">

android:key="parent_checkbox_preference"

android:title="父开关"

android:summary="这是一个父开关" />

android:key="child_checkbox_preference"

android:dependency="parent_checkbox_preference"

android:layout="?android:attr/preferenceLayoutChild"

android:title="子开关"

android:summary="这是一个子开关" />

补充

android:summaryOff="已关闭"

android:summaryOn="已开启"

android:title="无线状态(WIFI)" />

补充 + 动态修改 PreferenceFragment 内容// preferences_evolver_fragment

android:key="evolver_screen_preference">

// EvolverPreference

public class EvolverPreference extends PreferenceFragment {

// 标签

private static final String TAG = "EvolverPreference";

// PreferenceScreen

PreferenceScreen evolver_screen_preference = null;

// Handler 消息处理

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0x1001:

JSONObject json = (JSONObject) msg.obj;

try {

JSONObject params = json.getJSONObject("params");

evolver_screen_preference.removeAll();

for (Iterator iter = params.keys(); iter.hasNext(); ) {

String key = (String) iter.next();

JSONObject software = params.getJSONObject(key);

Preference preference = new Preference(getActivity());

preference.setTitle(software.getString("name"));

preference.setSummary("版本:" + software.getString("version") + " - " + software.getString("date"));

evolver_screen_preference.addItemFromInflater(preference);

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

};

// 获取 Handler

public Handler getHandler() {

return handler;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.preferences_evolver_fragment);

evolver_screen_preference = (PreferenceScreen) getPreferenceManager().findPreference("evolver_screen_preference");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在`onCreatePreferences`方法中启动另一个`PreferenceFragment`,你可以使用`PreferenceManager`的`setPreferences()`方法来设置根`PreferenceScreen`。然后,在设置根`PreferenceScreen`之后,你可以创建一个新的`PreferenceFragment`实例并将其添加到当前的活动或容器中。以下是一个示例代码: ```java public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); // 获取PreferenceManager PreferenceManager preferenceManager = getPreferenceManager(); // 创建新的PreferenceFragment实例 AnotherSettingsFragment anotherFragment = new AnotherSettingsFragment(); // 设置新的PreferenceFragment作为根PreferenceScreen preferenceManager.setPreferences(anotherFragment.getPreferenceScreen()); // 添加新的PreferenceFragment到当前活动或容器中 getChildFragmentManager().beginTransaction() .replace(android.R.id.content, anotherFragment) .commit(); } } ``` 在上面的示例中,首先使用`setPreferencesFromResource()`方法设置根`PreferenceScreen`。然后,使用`getPreferenceManager()`获取`PreferenceManager`实例。接下来,创建新的`AnotherSettingsFragment`实例,并使用其`getPreferenceScreen()`方法获取其根`PreferenceScreen`。最后,调用`setPreferences()`将新的`PreferenceScreen`设置为根,并使用`getChildFragmentManager()`将新的`PreferenceFragment`添加到当前的活动或容器中。 请确保在你的代码中适当地导入需要的类和资源文件,并根据你的实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值