我想創建一個自定義 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
提交
取消