单击按钮打开SettingsActivity的子优先屏幕

时间:2016-05-06 17:25:21

标签: android android-activity preferenceactivity preferencescreen android-settings

我的 SettingsActivity 有子偏好设置屏幕。我想在按钮点击时从另一个 PreferenceScreen 直接打开SettingsActivity中的一个嵌套 Activity

基本上,我希望将用户从Activity重定向到SettingsActivity屏幕的子部分。有办法吗?

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:title="@string/pref_header_general">
    </PreferenceCategory>
    <ListPreference
    ..
    />
    <PreferenceScreen <!--Show this sub preference screen in Setttings on button click -->

        android:key="@string/pref_key_open_this_screen"
        android:summary="@string/pref_summary_sample"
        android:title="@string/pref_title_sample" >
        <SwitchPreference
            android:defaultValue="@string/pref_summary_enabled"
            android:key="@string/pref_key_enabled"
            android:title="@string/pref_title_enabled"
            android:summary="@string/pref_summary_reminder_enabled"/>
        <ListPreference
        ..
        />
        <ListPreference
        ..
        />
    </PreferenceScreen>
</PreferenceScreen>

1 个答案:

答案 0 :(得分:1)

经过一番研究后我找到了解决方案。希望它能帮助别人。我们可以使用下面的代码来模拟点击子偏好设置屏幕。

  • 从您选择的活动开始SettingsActivity的意图。
  • 传递额外费用让SettingsActivity知道需要打开子偏好设置屏幕
  • 如果SettingsActivity收到意图,请运行以下代码并打开子偏好设置屏幕

代码:

PreferenceScreen preferenceScreen  = (PreferenceScreen) findPreference(getResources().getString(R.string.pref_key_root_screen));
PreferenceScreen subPreferenceScreen  = (PreferenceScreen) findPreference(getResources().getString(R.string.pref_key_sub_preference_screen));
final ListAdapter listAdapter = preferenceScreen.getRootAdapter();
final int itemsCount = listAdapter.getCount();
int itemNumber;
for (itemNumber = 0; itemNumber < itemsCount; ++itemNumber) {
    if (listAdapter.getItem(itemNumber).equals(subPreferenceScreen)) {
        //simulates click on the sub-preference
        preferenceScreen.onItemClick(null, null, itemNumber, 0);
        break;
    }
}