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

我想创建一个自定义 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();

所以我做错了什么?我查了一下,这不是获取布局实例的正确方法吗?


30秒到达战场
浏览 181回答 1
1回答

呼如林

问题在于您的LavadasView.&nbsp;当您Activity膨胀时,它会LavadasView(Context context, AttributeSet attrs)在您的自定义布局上调用构造函数。在此构造函数,你需要调用super(context, attrs)的ConstraintLayout要适当充气,但你只叫super(context)这就是为什么你得到的NullPointerException。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java