0

我必须在其他布局的子布局(linearlayout)中设置布局。为此,我在要设置到根布局中的布局活动上编写以下代码:

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    **setContentView(R.layout.main);**

    /**Define root layout's child where I want to set the layout*/
    LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);

    /**Inflate this layout and add it to the root layout*/
    LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View this_layout = inflater.inflate(R.layout.main, null);
    inside_menu_view.addView(this_layout);

但我在最后一行得到一个 NULLPOINTEREXCEPTIONinside_menu_view.addView(this_layout);

更新 - 在 super.onCreate 之后添加了 setContentView()

4

2 回答 2

0

此行将返回null,因为您尚未调用setContentView()

 LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);

你需要先setContentView(R.layout.layout_with_activitycontent);打电话

从文档

从在 onCreate(Bundle) 中处理的 XML 中查找由 id 属性标识的视图。

如果找到则返回视图,否则返回 null。

您尚未使用 a 或使用 a处理 xmllayout文件,因此当您尝试在其上调用方法时会导致 a 。setContentView()LayoutInflaterreturn nullNPEaddView()

编辑

我不确定你为什么这样做,但你不能。在我上面的链接中,您只能使用在 inflated 内部findViewById()找到一个. 你不能用它来找到一个没有膨胀的内部。ViewlayoutViewlayout

如果您要使用该layout文件,请将其放入。setContentView()

不同的方法 您可能想使用Fragmentsthen 来实现这一点。

请参阅有关如何使用这些的文档

或者您可以使用包含您想要包含在所有<include>“菜单”中的“菜单”,然后您可以在需要显示您的内部部分时进行切换。layoutActivitiesActivitieslayout

请参阅此处有关重用布局的信息

的例子<include>。你有一些layout你想重用的东西,比如说main.xml,然后在Activity你想重用它的地方,你只需做类似的事情

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="30dp"
    android:background="@drawable/blue">
        <include layout="@layout/main"
        android:id="@+id/main_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        <!-- other layouts -->
/<RelativeLayout>

你的显然会有所不同,但这是我的一个例子。希望这可以帮助。

于 2013-10-31T14:49:51.333 回答
0

假设您的 R.layout.main 是一个 LinearLayout:

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

现在在 onCreate() 中:

LinearLayout layout = (LinearLayout) findViewById(R.id.main_layout);

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View this_layout = inflater.inflate(R.layout.main_layout, layout, true);

this_layout 会自动添加到活动的布局中。

于 2013-10-31T16:42:50.393 回答