封装dialog时一些不解的地方

一个点击事件失效的记录

下面是一个作为父类的dialog

js 复制代码
public abstract class BaseDialog <VDB extends ViewDataBinding> extends AppCompatDialog {

    protected VDB binding;

    public BaseDialog(@NonNull Context context) {
        super(context);
        binding = DataBindingUtil.inflate(
                getLayoutInflater(),
                getContentViewId(),
                null,
                false
        );
        setContentView(getContentViewId());
        processLogic();
    }


    protected abstract int getContentViewId();

    /**
    *处理业务逻辑
     * */
    protected abstract void processLogic();


}

这是他的一个子类

js 复制代码
public class GainDialog extends BaseDialog<DialogGainBinding> {
    public GainDialog(@NonNull Context context) {
        super(context);
        Log.d("dialog","22222");
       
    }
    
    @Override
    protected int getContentViewId() {
        return R.layout.dialog_gain;
    }

    @Override
    protected void processLogic() {
        binding.closeButton.setOnClickListener(v -> {
            dismiss();
        });
    }
    
}

可以看到在这个子类中,我们已经对closeButton设置了点击事件让其关闭,但是当我们运行之后,点击这个按钮发现并没有像我们预期之中一样关闭弹窗。 经过排查发现问题出现在父类的这一行代码

setContentView(getContentViewId());

如果把这行代码换成

setContentView(binding.getRoot());

点击事件就能成功响应了。

为什么会这样还没有仔细分析。除此之外,还有一个疑惑的的地方:就是当我们实例化GainDialog时用的是

GainDialog dialog = new GainDialog(MainActivity.this);

为什么还调用了父类里的构造方法

js 复制代码
public BaseDialog(@NonNull Context context) {
        super(context);
        binding = DataBindingUtil.inflate(
                getLayoutInflater(),
                getContentViewId(),
                null,
                false
        );
        setContentView(getContentViewId());
        processLogic();
    }
相关推荐
RATi GORI6 小时前
MySQL中的CASE WHEN语句:用法、示例与解析
android·数据库·mysql
MoFe16 小时前
【Mysql】创建IP授权用户并授权
android
冬奇Lab8 小时前
Camera2 API架构基础:Android视频系统的大门
android·音视频开发·源码阅读
hnlgzb8 小时前
安卓app kotlin语法,Hilt是什么东西?
android·开发语言·kotlin
Android系统攻城狮10 小时前
Android tinyalsa深度解析之pcm_params_get_periods_min调用流程与实战(一百七十三)
android·pcm·tinyalsa·音频进阶手册
Xempastissimo11 小时前
Android常见界面控件
android
法欧特斯卡雷特11 小时前
从 Kotlin 编译器 API 的变化开始: 2.3.20
android·后端·开源
词元Max12 小时前
1.5 Harness 架构深度解析:Claude Code 为什么强?
android·架构
yy552712 小时前
Mysql 主从复制与读写分离
android·数据库·mysql
zhenxin012213 小时前
万字详解 MySQL MGR 高可用集群搭建
android·mysql·adb