1

まず、この問題に関する他のすべてのスレッドに目を通し、Google で回答を探しましたが、何も役に立ちませんでした。

実行時に追加されるカスタム ビューを含むレイアウトがあります。カスタム ビューにはsuper(context, attrs)コンストラクターがあります。

カスタム ビュー:

public CustomLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize some variables...
}

次の方法でアクティビティにビューを追加します。

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++;
    }
    }
}

上記のメソッドでカスタム ビューに findViewById を使用すると、addNewView()すべて問題ありません。ただし、ビューが膨張した後 (および明らかに後) に、アクティビティ内の他の場所で findViewById を使用しようとするとsetContentView、null ポインターが返されます。someView.findViewById()うまくいかないことも試しました。私は困惑しています。何か案は?

Logcat はヌル ポインターを表示しますが、それ以上は表示しません。

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>
4

1 に答える 1

3

メソッドはどこaddNewView()で呼び出されていますか? 私の理解でfindViewById()は、カスタム ビューのコンストラクターで a を実行すると、null. findViewById()カスタム ビューをいつ安全に呼び出すことができるかを示す信頼できるリファレンスは見つかりませんでしたが、通常はそれ以降に呼び出しますonFinishInflate()

于 2013-02-27T12:36:46.537 に答える