如题,具体的场景我慢慢道来:
我使用的第三方dialog库:XPOpup,此类默认的弹窗可交互控件就两个按钮。我做了个自定义的xml弹窗布局,而且我想在此弹窗弹出后设置今日不再弹出功能。
👇这是我写的弹窗xml
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();
没有报错(编译时和运行时都没报错),但是就是没有效果。
这是效果图👇
用 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();
}