将.addView用于ViewGroup时出现NullPointerException

时间:2013-05-21 16:35:18

标签: view nullpointerexception android-linearlayout viewgroup

我正在尝试使用.addViewLinearLayout添加另一个ViewGroup

我在LogCat上收到以下错误:

  

05-21 16:23:04.096:E / AndroidRuntime(2086):致命异常:主要   05-21 16:23:04.096:E / AndroidRuntime(2086):java.lang.NullPointerException   05-21 16:23:04.096:E / AndroidRuntime(2086):在android.view.ViewGroup.addView(ViewGroup.java:3148)   05-21 16:23:04.096:E / AndroidRuntime(2086):在android.view.ViewGroup.addView(ViewGroup.java:3131)

这是被调用的代码:

final LinearLayout eventContainerSub =
                        (LinearLayout) findViewById(R.layout.event_container);

                final LinearLayout eventContainer =
                        (LinearLayout) findViewById(R.id.eventContainer);

                eventContainer.addView(eventContainerSub);

这是ViewGroup(第一个线性布局):

<LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animateLayoutChanges="true"
                android:id="@+id/eventContainer"
                android:weightSum="100"
                android:duplicateParentState="true">

这是(第二个)LinearLayout我正在添加到上面的(第一个)LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:id="@+id/eventContainerSub">

1 个答案:

答案 0 :(得分:0)

两个容器都具有完全相同的名称.eventContainerSub。

没有eventContainer,请将视图组更改为您计划的容器..

<LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animateLayoutChanges="true"
                android:id="@+id/event_container"
                android:weightSum="100"
                android:duplicateParentState="true">

并确保代码要求正确的ID:

final LinearLayout eventContainerSub =                         (LinearLayout)findViewById(R.layout.eventContainerSub);

            final LinearLayout eventContainer =
                    (LinearLayout) findViewById(R.id.event_container);

我还建议你先从视图中删除SubContainer,如果它已经膨胀了,因为该视图已经有一个父级,你不能将SubContainer附加到两个父级。

从此文件中保留子容器并创建一个新容器,或从父文件中删除,然后添加到所需的ViewGroup。

Android layout replacing a view with another view on run time

Call removeView() on the child's parent first