为了账号安全,请及时绑定邮箱和手机立即绑定

无法调用自定义 ConstraintLayout 类的方法?

无法调用自定义 ConstraintLayout 类的方法?

30秒到达战场 2021-10-28 09:30:20
我想创建一个自定义 ConstraintLayout 以便我可以从其初始化的活动中触发一些功能。我有以下代码:首先在布局中初始化我的自定义视图:<package.com.app.Main.LavadasView        android:id="@+id/main_autolavados_lavadas_lavadas_view"        android:layout_width="0dp"        android:layout_height="25dp"...        />这是我的自定义类 LavadasView,从另一个 XML 文件初始化的约束布局:Java类public class LavadasView extends ConstraintLayout {    public LavadasView(Context context,AttributeSet attrs) {        super(context);//Inflate view from XML layout file        LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        inflater.inflate(R.layout.lavadas_view, this);    }    public void resetView(){        //Some ui updates    }}LavadasView xml 文件,只是一个普通的约束布局:<?xml version="1.0" encoding="utf-8"?>    <android.support.constraint.ConstraintLayout        xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:app="http://schemas.android.com/apk/res-auto"        xmlns:tools="http://schemas.android.com/tools"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.constraint.ConstraintLayout>在我的 Activity 中findViewById,我使用 mehtod获取实例,然后我想调用 resetView 函数,这给了我一个与 LavadasView 相关的空指针异常:LavadasView lavadasView = (LavadasView) findViewById(R.id.main_autolavados_lavadas_lavadas_view);//Call this method later on        lavadasView.resetView();所以我做错了什么?我查了一下,这不是获取布局实例的正确方法吗?
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

问题在于您的LavadasView. 当您Activity膨胀时,它会LavadasView(Context context, AttributeSet attrs)在您的自定义布局上调用构造函数。在此构造函数,你需要调用super(context, attrs)ConstraintLayout要适当充气,但你只叫super(context)这就是为什么你得到的NullPointerException


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信