前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中在activity给别的页面的控件添加控件点击事件

Android中在activity给别的页面的控件添加控件点击事件

作者头像
SakuraTears
发布2022-01-13 14:59:12
1.8K0
发布2022-01-13 14:59:12
举报
文章被收录于专栏:从零开始的Code生活

最简单的办法就是在xml的控件里写android:onClick="method",然后在activity里面写对应的方法。

在activity里直接写findViewById会出现空指针异常,因为当前activity对应的页面里面找不到要绑定的控件。 于是在网上查到了另外一种办法: View view = getLayoutInflater().inflate(R.layout.test_layout, null); test_layout为想要添加点击事件的控件的页面,这样可以找到那个控件虽然不会报空指针异常,但是新建了一个View和当前activity使用的View不是同一个View,所以就算设置了点击事件也无效。

发现这个问题是在写AlertDialog的时候自定义了AlertDialog的View,然后里面有Button需要设置点击事件

代码语言:javascript
复制
AlertDialog.Builder adBuilder = new AlertDialog.Builder(MainActivity.this);
View dialogLayout = getLayoutInflater().inflate(R.layout.dialog, null);
adBuilder.setView(dialogLayout);
ad = adBuilder.create();
ad.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
View view = getLayoutInflater().inflate(R.layout.test_layout, null);
Button close = view.findViewById(R.id.close);
close.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ad.dismiss();
    }
});
ad.show();

dialog为自定义的AlertDialog页面,然后给Button添加点击事件,看似没问题,但是前面 View dialogLayout = getLayoutInflater().inflate(R.layout.dialog, null); 已经获取了那个页面,然后后面又新建了一个 View view = getLayoutInflater().inflate(R.layout.test_layout, null); 导致AlertDialog显示View和Button的点击事件View不是同一个View,所以就会点击无效。

代码语言:javascript
复制
AlertDialog.Builder adBuilder = new AlertDialog.Builder(MainActivity.this);
View dialogLayout = getLayoutInflater().inflate(R.layout.dialog, null);
adBuilder.setView(dialogLayout);
ad = adBuilder.create();
ad.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Button close = dialogLayout.findViewById(R.id.close);
close.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ad.dismiss();
    }
});
ad.show();

将Button的View和AlertDialog的View设置为同一个就可以解决这问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年05月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档