android - nullpointerexception findViewById() 为自定义视图Android返回空

  显示原文与译文双语对照的内容

让我先来说明一下: 我已经查看了这个问题的所有它的他线程,并且对Google进行了回答,但没有什么帮助我。

我有一个布局,它包含一个在运行时添加的定制视图。 我的自定义视图有 super(context, attrs) 构造函数。

自定义视图:


public CustomLinearLayout(Context context, AttributeSet attrs) {


 super(context, attrs);


 initialize some variables...


}



我使用以下方法向 Activity 添加视图:


public void addNewView (boolean isEmpty) {


 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);


 for (int i = 0; i <amount; i++) {


 if (isEmpty) {


 View v = (ViewGroup) inflater.inflate(R.layout.my_custom_layout, layoutContainer, true);


 viewTracker++;


 }


 }


}



如果我在上面的addNewView() 方法中使用findViewById作为自定义视图,那么一切都很好。 但是,如果在视图大量增加了findViewById之后,在 Activity 中使用,则获得一个空指针。 我还尝试了 someView.findViewById(),它不工作。 我被。了?

aecq显示一个空指针,但没有更多信息:


02-16 06:56:10.681: E/AndroidRuntime(11360): FATAL EXCEPTION: main


02-16 06:56:10.681: E/AndroidRuntime(11360): java.lang.NullPointerException


02-16 06:56:10.681: E/AndroidRuntime(11360): at com.nutrifit.Fragments.WorkoutPlannerPopup.resetOtherView(WorkoutPlannerPopup.java:404)


02-16 06:56:10.681: E/AndroidRuntime(11360): at com.nutrifit.customviews.CustomLinearLayout.onTouchEvent(CustomLinearLayout.java:43)


02-16 06:56:10.681: E/AndroidRuntime(11360): at android.view.View.dispatchTouchEvent(View.java:7239)


02-16 06:56:10.681: E/AndroidRuntime(11360): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168)


02-16 06:56:10.681: E/AndroidRuntime(11360): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903)


02-16 06:56:10.681: E/AndroidRuntime(11360): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)



以下是我在XML中的自定义视图:


<?xml version="1.0" encoding="utf-8"?>


<com.nutrifit.customviews.CustomLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"


android:id="@+id/exercise_container_0"


android:layout_width="match_parent"


android:layout_height="wrap_content"


android:orientation="horizontal"


android:background="@drawable/wpp_background_border"> 



<ImageView android:id="@+id/delete_button_1"


 android:layout_width="wrap_content"


 android:layout_height="wrap_content"


 android:background="@drawable/wpp_background_border"/>


...more android child views



</com.nutrifit.customviews.CustomLinearLayout>



时间: 原作者:

正在调用的addNewView() 方法? 从我的理解中,如果在自定义视图的构造函数中执行 findViewById(),则可以获得一个 null 。 在自定义视图中调用 findViewById() 时,我没有发现权威引用,但是我通常在 onFinishInflate() 或者更高版本中执行。

原作者:
...