我想创建一个自定义 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
。
添加回答
举报
0/150
提交
取消