新手-99 2022-10-20 22:23 采纳率: 79.3%
浏览 49
已结题

安卓实现“今天不再弹出”功能?

如题,具体的场景我慢慢道来:
我使用的第三方dialog库:XPOpup,此类默认的弹窗可交互控件就两个按钮。我做了个自定义的xml弹窗布局,而且我想在此弹窗弹出后设置今日不再弹出功能。

👇这是我写的弹窗xml

img


默认可设置的只有标题、内容、按钮1和按钮2(还有两个按钮的点击事件)。
现在我想把“今天不再弹出”加上去,并且当用户选择“不再弹出”选择框,并且点击任意按钮后,存入本地一个数据,下次进入这个界面的时候读取该数据,以此判断该不该弹出弹窗。
我尝试过用LayoutInfalter,这是我的代码:

 CheckBox bztc;
                        @SuppressLint("InflateParams") View root = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_diy2, null);
                        bztc = root.findViewById(R.id.buzaitanchu);

                        new Thread() {
                            public void run() {
                                runOnUiThread(() -> {
                                    //更新UI
                                    bztc.setText("不再提醒");
                                });
                            }
                        }.start();

没有报错(编译时和运行时都没报错),但是就是没有效果。
这是效果图👇

img


求解答!!

  • 写回答

1条回答 默认 最新

  • liujichangdeboke 2022-10-21 08:31
    关注

    用 SharedPreferences 保存一个字符串。当用户没有勾选 “今日不在弹出” 点击确定,把这个字符串置为空字符串,当用户勾选 “今日不在弹出” 然后点击确定则保存一下点击确定的时间。每次要进入弹出逻辑时候,取出这个字符串判断一下,如果为空字符串或者当前日期超过保存日期就弹出,如果没有超过就不弹。。。。
    dialog 样式可以自定义一个dialog,然后使用你写好的xml文件,在自定义的dialog里面初始化你的View,做事件监听,例如这样:

    
    public abstract class TitleMessageDialog extends BaseDialog {
        private TextView tv_title,tv_message,tv_1,tv_2;
        private RelativeLayout rl_btn1,rl_btn2;
        public TitleMessageDialog(Context context, String title, String message, String btnName1, String btnName2) {
            super(context);
            setContentView(R.layout.dialog_title_message_2btn);
            tv_title = findViewById(R.id.tv_title);
            tv_title.setText(title);
            if (TextUtils.isEmpty(title)){
                tv_title.setVisibility(View.GONE);
            }else {
                tv_title.setVisibility(View.VISIBLE);
            }
            tv_message = findViewById(R.id.tv_message);
            tv_message.setText(message);
    
            tv_1 = findViewById(R.id.tv_1);
            tv_1.setText(btnName1);
            tv_2 = findViewById(R.id.tv_2);
            tv_2.setText(btnName2);
            rl_btn1 = findViewById(R.id.rl_btn1);
            rl_btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    btn1Click();
                }
            });
            rl_btn2 = findViewById(R.id.rl_btn2);
            rl_btn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    btn2Click();
                }
            });
        }
        public abstract void btn1Click();
        public abstract void btn2Click();
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 修改了问题 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛