封装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();
    }
相关推荐
大龄程序员狗哥几秒前
第49篇:TensorFlow Lite实战——将图像分类模型部署到安卓手机(项目实战)
android·分类·tensorflow
BetterNow.2 分钟前
安卓内存Previous为什么可以算进freeRam
android·linux·安卓·安卓性能·安卓内存
码云数智-园园7 分钟前
PHP 8.x 命名的参数与属性(Attribute):告别注释,构建真正的元数据
android·ide·android studio
0pen17 分钟前
ZygiskNext 源码解析(三):zygiskd 的模块管理、memfd 与 companion
android·安全·开源
Android_xiong_st7 分钟前
(原创)2026安卓面试复盘
android·面试·职场和发展
码点22 分钟前
Android 9休眠时任意键唤醒屏幕
android·linux·运维
andr_gale26 分钟前
05_aosp12中init进程解析rc文件流程分析
android·aosp·framwork
CyL_Cly29 分钟前
Appteka下载 最新版18.4下载安装
android
张风捷特烈36 分钟前
状态管理大乱斗#05 | Riverpod 源码评析 (中) - 上层建筑
android·前端·flutter
三少爷的鞋37 分钟前
AsyncTask 已死多年:协程到底赢在哪里?
android