android - 更改 PreferenceScreen 时保持操作栏显示

标签 android android-actionbar preferenceactivity preferencefragment

我正在尝试在我的偏好屏幕中显示一个操作栏。 为此,我在 SettingActivity 中添加了以下代码

public class PreferencesActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.preferences_activity);
        getFragmentManager().beginTransaction()
                .replace(R.id.container, new PreferencesFragment()).commit();

            getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

然后是我在 PreferencesFragment 中的其余代码。 这很好用,但只要我按下 PreferenceScreen 首选项,操作栏就会隐藏。如果我回到首选项主屏幕,我可以再次看到它。 知道如何保持操作栏显示(并使用 PreferenceScreen 标签更新)吗?

编辑:查看 PreferenceScreen 代码,当单击 PreferenceScreen 时,它看起来像是打开了一个全屏对话框。因为我的偏好有一个标题,所以对话框也应该显示一个标题......但它没有

    // Set the title bar if title is available, else no title bar
    final CharSequence title = getTitle();
    Dialog dialog = mDialog = new Dialog(context, context.getThemeResId());
    if (TextUtils.isEmpty(title)) {
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    } else {
        dialog.setTitle(title);
    }

最佳答案

我终于设法找到了一种方法来做到这一点。 这有点难看,但它有效。

首先我在我的preferences.xml 文件中的每个PreferenceScreen 定义中添加一个相同的Intent(确保更新额外参数的值)

        <PreferenceScreen
            android:key="pref1"
            android:summary="Summary1"
            android:title="Title1" >
            <intent
                android:action="android.intent.action.VIEW"
                android:targetPackage="my.package"
                android:targetClass="my.package.activity.PreferencesActivity" >
                <extra android:name="page" android:value="pref1" />
            </intent>
...

</PreferenceScreen>

顺便说一句 my.package.activity.PreferencesActivity 是我当前的偏好 Activity

然后我在 Manifest 中添加一个 Intent 过滤器

        <activity
            android:name=".activity.PreferencesActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/settings" >
            <intent-filter android:label="Pref" >
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.PREFERENCE" />
            </intent-filter>
  </activity>

我在 PreferenceActivity 中添加了一些代码来处理这个

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

        this.fragment = new PreferencesFragment();
        this.fragment.setActivityIntent(getIntent());
        getFragmentManager().beginTransaction()
                .replace(R.id.container, this.fragment).commit();
    }

最后我在我的 PreferencesFragment 类中添加以下代码

    public void setActivityIntent(final Intent activityIntent) {
 if (activityIntent != null) {
                        if (Intent.ACTION_VIEW.equals(activityIntent.getAction())) {

                        if (intent.getExtras() != null) {
                            final String page = intent.getExtras().getString("page");
                            if (!TextUtils.isEmpty(page)) {
                                openPreferenceScreen(page);
                            }
                        }
                    }
    }

private void openPreferenceScreen(final String screenName) {
    final Preference pref = findPreference(screenName);
    if (pref instanceof PreferenceScreen) {
        final PreferenceScreen preferenceScreen = (PreferenceScreen) pref;
        ((PreferencesActivity) getActivity()).setTitle(preferenceScreen.getTitle());
        setPreferenceScreen((PreferenceScreen) pref);
    }
}

关于android - 更改 PreferenceScreen 时保持操作栏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357292/

相关文章:

Android:从preferences.xml 启动Activity

android - 在 PreferenceActivity 和嵌套首选项上设置 HomeButtonEnabled

android - 如何从 fragment 中获取工具栏?

android - 如何在 Linux 中创建扩展名为 .aidl 的文件?

java - 有没有办法在 WebView 应用程序中创建还原点?

android - Kotlin Android Studio 在调用另一个函数之前等待一个函数完成

android - actionBarSherlock 字幕 textSize

java - 如何使用调色板库设置操作栏的颜色?

android - 是否有类似于铃声偏好的振动偏好?

android - 如何在 android 中保存和恢复 FragmentPagerAdapter 状态?