更改 PreferenceScreen 时保持操作栏显示

2024-06-24

我正在尝试在我的首选项屏幕中显示操作栏。 为此,我在我的设置活动中添加了以下代码

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
            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();
    }

最后,我在 Preferences Fragment 类中添加以下代码

    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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 PreferenceScreen 时保持操作栏显示 的相关文章

随机推荐

  • 如何使我的网站获得更好的性能

    嘿那里 我在 Windows 2008 服务器上运行 IIS7 在高峰时段 我们有以下行为 CPU负载接近空闲 请求排队 使用资源监视器进行监控 执行时间超过10秒 1 4 请参阅以前的版本和编辑 5 异步做事 按照建议 我创建了一个简单的
  • Material UI 自动完成:将值与状态同步

    如何存储值Material UI 的自动完成 https material ui com components autocomplete 进入React的状态 自动完成使用多选并具有字符串数组作为值 功能组件示例 在此示例中 我们将显示一个
  • 将 InputStream 转换为 SeekableByteChannel

    我正在尝试转换InputStream to a SeekableByteChannel以便使用 LWJGL 在 Open AL 中进行流式传输 借助网上的demo 目前代码如下 InputStream source Thread curre
  • PHP instanceof 对于 true 条件返回 false

    我完全困惑为什么 php 的instanceof当以下情况时 运算符坚持认为此处的 LVALUE 不是已定义类的实例get class说是的 class WhereIn public function construct args echo
  • 用于训练神经网络的 MSE 成本函数

    In an 在线教科书 http neuralnetworksanddeeplearning com chap1 html关于神经网络和深度学习 作者通过最小化 a 来说明神经网络基础知识二次成本函数他说这是同义词均方误差 不过 有两件事让
  • Python 多处理问题/误解

    我在多处理方面遇到问题 我在 linux 2 6 36 上使用 python2 7 我知道使用更高级别的模块或库会更容易 但我正在尝试使用较低级别的函数 os fork 和 os exec 来确保我真正理解 这是一种学习练习 下面是我的代码
  • 我的 System.Numerics 命名空间在哪里?

    我正在使用 Visual Studio 2010 并尝试使用BigInteger输入 C 程序 这种类型应该可以在System Numerics命名空间 但我似乎没有在 Net 4 0 框架中安装它 当我输入 using System Nu
  • Android 两指旋转

    我正在尝试在 android 中实现两指旋转 但是它并没有按预期工作 目标是像 Google 地球一样实现旋转 用两根手指围绕焦点旋转图像 目前我的旋转侦听器如下所示 private class RotationGestureListene
  • 如果路线有 Tolls Google Maps API xml 请求,则返回

    在标准谷歌地图方向搜索中 在编写方向之前会提供咨询 说明该路线有收费站 如果没有通行费 则不会显示任何咨询信息 我有一个谷歌地图 API 请求 该请求显示地图 其中包含从 1 个家庭地址到 1 个工作地址的旅行距离和持续时间 我很难找到在哪
  • 使用 Ruby SDK 将文件上传到 Amazon S3

    我正在尝试上传文件 一个简单的 hello txt 我正在关注文档 但无法将其上传到我的存储桶 START AWS CLIENT s3 Aws S3 Resource new bucket s3 bucket BUCKET NAME beg
  • 启动 Rails 控制台时不运行 rufus-scheduler 的最佳方法

    我使用 rufus scheduler 来运行一些定期任务 但是当我只想测试东西时 在 Rails 控制台中使用它们非常烦人 自动启动控制台时是否有一种简单的方法来停止所有 rufus scheduler 任务 在启动调度程序的代码中 如果
  • 在php中将excel转换为xml

    我想读取 Excel 文件并根据该数据创建 XML 文件 在php中可以吗 Thanks 快速谷歌搜索发现this PHP https github com PHPOffice PHPExcelCodePlex 上的项目 您可能想看一下 它
  • 在 Windows Phone 8 上将 wav 文件压缩为 wma

    我希望在 Windows Phone 上将 wav 文件编码为 wma 或 mp3 ogg 等 我在网上没有找到任何资源 关于如何存档这个的任何想法 我正在尝试从麦克风录制声音并从手机上传 这就是为什么我更喜欢在发送之前压缩音频文件 从 W
  • 是否可以为 $httpBackend 响应设置通配符?

    假设我在 AngularJS 中有以下测试代码 var someURL var dummyJSON httpBackend whenGET someURL respond dummyJSON 有没有一种方法可以使其成为一组 URL 而不仅仅
  • 设置 HTMLEditorExtender 在新窗口中打开链接

    我正在尝试使用 Ajax Toolkit HTMLEditor 2012 年 6 月版本 来改进用于发布新闻项目和链接 主要是内部资源 的严格内部应用程序 一切都工作得很好 除了我无法让链接创建者创建在新窗口中打开的链接 基本上带有 tar
  • HTML 编辑器 — 一次编辑开始和结束标记

    是否有 HTML 编辑器可以在编辑开始标签时自动更改结束标签 阿普塔纳工作室 http www aptana com studio做 只需在 窗口菜单 gt 首选项 gt Aptana gt 编辑器 gt HTML gt 键入 中设置修改对
  • 使用 Python boto 从 S3 获取文件元数据

    我有一些二进制文件AWS S3 我需要得到file metadata like created time modified time并使用 Python Boto API 访问时间 我们尝试的是将文件复制到 EC2 实例 从那里我们使用os
  • 如何从图像中提取 RGB 并仅将 RG 绘制为图形? R 代表 X,G 代表 Y

    我正在尝试从图像中提取 RGB 分量并使用 matplotlib 绘制 3D RGB 直方图 但我不知道该怎么做 这是我当前的代码 import cv2 import numpy as np from scipy import ndimag
  • 如果 include() 是有条件的,即使不满足条件,PHP 也会包含该文件吗?

    这个问题困扰了我很长一段时间 我想我应该向专家寻求答案 我想知道通过单个文件汇集所有 PHP 请求是否是一种糟糕的编程技术 我一直在开发一个网站 不确定它是否会随着增长而扩展 因为我不能 100 确定 PHP 如何处理include 功能
  • 更改 PreferenceScreen 时保持操作栏显示

    我正在尝试在我的首选项屏幕中显示操作栏 为此 我在我的设置活动中添加了以下代码 public class PreferencesActivity extends ActionBarActivity Override protected vo