在首选项行中添加按钮

2024-01-16

我想要在“设置”屏幕上有一个按钮。这个问题已经被问过here https://stackoverflow.com/questions/10514005/add-a-button-into-prefrencescreen-android。但遗憾的是没有答案。 :(

为了实现这一点,我创建了一个像这样的自定义首选项 -

  public class CustomPreference extends Preference {

    private LinearLayout mWidgetContainer;
    private View mRowView;

    public CustomPreference(Context context) {
        super(context);
    }

    public CustomPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected View onCreateView(ViewGroup parent) {
        LayoutInflater viewInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mRowView = viewInflater.inflate(R.layout.preferences_row_view, parent, false);

        mWidgetContainer = (LinearLayout) mRowView.findViewById(android.R.id.widget_frame);

        Button button = new Button(getContext());
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        button.setLayoutParams(params);
        button.setBackgroundResource(R.drawable.listview_row_bg);
        button.setTextSize(14);
        button.setPadding(5, 5, 5, 5);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), BuyScreenActivity.class);
                getContext().startActivity(intent);
            }
        });
        button.setTypeface(null, Typeface.BOLD);
        button.setText("Buy now");
        mWidgetContainer.addView(button);

        return mRowView;
    }
}

这确实有效。但它的行为很奇怪。正如您所看到的,单击该按钮后,我将用户带到名为“Activity”的活动BuyScreenActivity。奇怪的是当我按下BuyScreenActivity,我回到“设置”屏幕,但是onDestroy and onStop of BuyScreenActivity根本没有被调用。为什么它会这样?

如果我向下滚动设置屏幕,onStop & onDestroy然后将被调用。为什么这必须是这样的?


我不知道为什么会发生这种情况,但如果它困扰你,只需重写 BuyScreenActivity.java 中的 onBackPressed() 即可:

@Override
public void onBackPressed() {
    startActivity(new Intent(getContext(), SettingsACtivity.class));
}

请注意,我假设您只能通过“设置”进入 BuyScreen。 如果不是,那么很容易将前一个活动的名称放入意图数据中,然后将其切换到所需的活动。

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

在首选项行中添加按钮 的相关文章

  • 使用DBFlow,如何加密已经存在的数据库?

    我正在使用 DBFlow 来处理项目中的数据库 并且我想对现有数据库进行加密 我知道我可能必须删除现有的未加密数据库并创建另一个加密数据库 我也知道我可以将 SQLCipher 与 DBFlow 一起使用 如上所述文档 https gith
  • 通过代码在创建时突出显示 ListView 项目

    我想在创建 listView 时突出显示 ListView 的第一行 0 我尝试了不同的方法 就像您在注释代码中看到的那样 但没有任何效果 这很奇怪 因为 OnItemClickListener 中的突出显示工作正常 它通过 xml 选择器
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • Play 商店中的应用描述更新

    我想更新应用程序的描述以及 Play 商店上的屏幕截图 但应用程序保持相同 即相同的版本号 我不想发布新应用程序 因为应用程序中没有任何更改 这可能吗 谷歌也会要求更新应用程序吗 您可以更新描述 也可以更改屏幕截图 您的应用程序将保持不变
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • 什么是 Android 测试协调器?

    谷歌最近发布了Android测试支持库1 0 读完后overview https android developers googleblog com 2017 07 android testing support library 10 is
  • FragmentActivity 无法解析为类型

    我正在尝试来自的应用程序这个博客 http android developers blogspot com 2011 02 android 30 fragments api html 在延长的同时FragmentActivity 我收到以下
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • TextView.setMaxLines 不起作用?

    在我的应用程序中 我有一个屏幕 其中显示一些文本 然后显示一张照片 文本的长度是可变的 有时根本没有 有时很多 所以我想对其进行设置 以便文本永远不会占用超过几行 但可以滚动 为下面的图像留下足够的空间 我这部分的视图组件是以编程方式创建的
  • 了解应用程序在后台时何时收到 Firebase 消息

    我知道这个标题有同样的问题 但不幸的是它没有得到正确的回答 它被接受了 here https stackoverflow com questions 37711082 how to handle notification when app
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • Android 从通知刷新 Activity

    我有一个程序 我在其中调用通知 如果您将其下拉 该通知将启动一个新活动 mNotificationManager NotificationManager getSystemService ns int icon R drawable sta
  • Android:透明活动问题

    最近 在我们的一款生产应用程序上 透明活动已停止工作 我的意思是它变成了黑色背景而不是透明背景 当我将活动的背景颜色设置为纯色 即红色 绿色等 时 它的应用不会出现问题 该问题可能是由于迁移到 AndroidX 引起的 但我没有这方面的证据
  • 如何用LoaderManager自动重新查询

    我有一个应用程序显示来自 SQLite DB 的数据 并且数据不断变化 所以显然 我认为我应该使用 LoaderManager 来显示数据 我读过一些关于将 LoaderManager 与 SQLite 结合使用的内容 然后看到了亚历克斯

随机推荐

  • 在 forEach 之后发送响应

    请注意 这不是两个类似标题问题的重复 这两个问题使用 Mongoose 并且答案仅适用于 Mongoose 查询 我有一个目录列表 每个目录都包含一个文件 我想返回一个 JSON 列表 其中包含每个文件的内容 我可以毫无问题地加载文件 但是
  • Python 检查值是否在字典列表中

    我有一个字典列表 例如 name Bernard age 7 name George age 4 name Reginald age 6 我想检查字符串值是否与列表中任何字典中的 名称 值相同 例如 Harold 将为 False 但 Ge
  • XMPP:检索 BOSH 会话 ID 和 RID

    请告诉我如何检索 SID 和 JID 我正在使用 Strope JS var conn new Strophe Connection bosh service 然而 conn sid or conn rid没有返回相同的数字 经过这个和那个
  • 尝试获取字段值时出现属性错误

    我正在使用 django 休息框架 并且我尝试使用的序列化器正在创建错误 我正在尝试做类似的事情https gist github com anonymous 7463dce5b0bfcf9b6767 https gist github c
  • 在不耗尽 RAM 的情况下使用并发 Future

    我正在做一些文件解析 这是一个 CPU 密集型任务 无论我向该进程放入多少文件 它使用的 RAM 都不会超过 50MB 该任务是可并行的 我已将其设置为使用下面的并发 future 将每个文件解析为单独的进程 from concurrent
  • 在Java中写入文本文件而不覆盖

    我正在尝试编写一种方法 如果 log txt 文件 尚不存在 则创建一个 log txt 文件 然后写入该文件 我遇到的问题是每次调用该方法时 它都会覆盖现有日志 如何更改方法 以便不覆盖数据而只更新文件 我的写入文件方法 File log
  • DataTable - 使可滚动,设置背景颜色并修复/冻结标题行和第一列

    我开始在 Flutter 中使用 webview 图表 表格进行开发 但是我遇到了一些表格问题 I use 数据表来表示表中的数据 有第一个问题 默认情况下 如果数据超出屏幕 则它不可滚动 所以我嵌入了一些小部件 即 SingleChild
  • 如何输入提示

    我如何输入提示来摆脱剩余的反射调用 def B amap D A i D B amap doubles aget A int i j doubles row 2 aget row int j 还剩下两个反射调用 但我不知道如何摆脱它们 您没
  • 使用 Alpha 通道绘制重叠的圆圈

    这个问题已经在这里得到了回答 重叠圆的组合面积 https stackoverflow com questions 1667310 combined area of overlapping circles 不过我的问题更具体 我在其他任意大
  • 不同格式的 SQL Server 日期时间比较

    我有一个 SQL 查询 我将在其中传递dd mm yyyy但SQL查询需要mm dd yyyy 我怎样才能启用此查询dd mm yyyy并根据正确的格式显示正确的结果 在 SQL Server 2008 中实现这一目标的最佳方法是什么 SE
  • realurl 生成没有 cHash 的条目

    我有一个 piBase 扩展 其中包含记录列表和详细信息页面 当首先调用列表时 一切都很好 realurl 版本2 0 15 TYPO3版本7 6 10 使用cHash参数创建详细信息页面的url 例如 cHash dc3409cee49f
  • Bootstrap 4.0 - 带图像+导航栏+全高正文的响应式标题

    我正在使用 bootstrap 4 构建一个响应式页面 其中有一个标题 标题部分 其中包含客户徽标 名称和导航栏的图像 所有这些元素都是响应式的 即图像根据屏幕尺寸缩小 导航栏在小屏幕上最小化 现在我想让身体也能做出反应 即 用内容填充屏幕
  • 多表触发器 SQL Server noob

    我有很多表都具有相同的 2 个日期时间列 lastModDate dateAdded 我想知道是否可以为这些表设置全局插入更新触发器来设置日期时间值 或者如果没有 有哪些方法 非常感谢任何指点 我同意没有这样的全局触发器 但是我们当然可以通
  • 如何将约束名称添加到已存在的约束中

    有没有办法为已经存在的约束命名 例如 create table employee emp id number 10 emp name varchar2 20 dept id number 10 foreign key dept id ref
  • Rails attr_accessible rspec 检查

    当我想测试属性是否为 不是时无障碍使用 RSpec 我这样做 class Foo attr accesible something else end describe Foo do it author should not be acces
  • 读取顺序文件 - 压缩文件与未压缩文件

    我正在寻找从磁盘读取顺序文件的最快方法 我在一些帖子中读到 如果我使用 lz4 等压缩文件 我可以获得比读取平面文件更好的性能 因为我将最大限度地减少 i o 操作 但是当我尝试这种方法时 扫描 lz4 压缩文件的性能比扫描平面文件差 我没
  • 将组合器解析器的列表/序列转换为单个解析器

    我有一个值列表 可以从中构造一个解析器列表 这些解析器通过映射依赖于这些值 请参见示例 然后我想做的就是通过串联将解析器列表变成单个解析器 一种可能性是使用foldLeft and parsers foldLeft success Nil
  • UISlider的editingDidEnd事件在iPad上不起作用

    我想在滑动 UISlider 结束时触发一种方法 我在 xib 中使用了 UISlider 的 editingDidEnd 事件并将其附加到 IBAction 方法 但该方法没有被调用 任何人都可以帮助我如何知道滑动何时结束UISlider
  • Visual Studio 2015 更新 3 (KB3165756) 安装程序被阻止

    因此 我尝试在新的 Windows 10 笔记本电脑上安装 Visual Studio 2015 Update 3 但无法安装以挽救我的生命 当我尝试通过原始安装 ISO 安装它时 它一直告诉我软件包失败 如果我使用独立更新文件 它会告诉我
  • 在首选项行中添加按钮

    我想要在 设置 屏幕上有一个按钮 这个问题已经被问过here https stackoverflow com questions 10514005 add a button into prefrencescreen android 但遗憾的