封装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();
    }
相关推荐
2501_915106321 天前
iOS 性能优化这件事,结合多工具分析运行期性能问题
android·ios·性能优化·小程序·uni-app·cocoa·iphone
千里马学框架1 天前
如何使用豆包手机的READ_FRAME_BUFFER权限截图密码画面
android·智能手机·framework·安卓framework开发·权限·截图·secure
游戏开发爱好者81 天前
App Store 上架流程,结合多工具协作
android·ios·小程序·https·uni-app·iphone·webview
阿道夫小狮子1 天前
android 音频抢占问题
android·音视频
撩得Android一次心动1 天前
Android 四大组件——Service(服务)【基础篇1】
android·服务·四大组件
峥嵘life1 天前
Android16 EDLA 认证测试BTS过程介绍
android·java·linux
茶憶1 天前
UniApp 安卓端实现文件的生成,写入,获取文件大小以及压缩功能
android·javascript·vue.js·uni-app
2501_915921431 天前
uni-app 的 iOS 打包与上架流程,多工具协作
android·ios·小程序·uni-app·cocoa·iphone·webview
Lei活在当下1 天前
【Perfetto从入门到精通】4.使用 heapprofd 工具采样追踪 Java/Native 内存分配
android·性能优化·架构
alexhilton1 天前
学会在Jetpack Compose中加载Lottie动画资源
android·kotlin·android jetpack