无法在运行时修改layout.xml中定义的布局(nullPointerException)

时间:2013-07-11 08:44:00

标签: android

我无法在运行时向活动的主布局添加子布局。更准确地说,当我调用 setContentView(布局) layout.add(mySubLayout)时,我会得到一个空指针异常,其中布局由 findViewById(R.id)检索.idLay)即可。下面是xml代码。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/idLay"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    tools:context=".TrainingActy" >

似乎无法修改静态创建的布局。但我看到堆栈溢出的答案似乎可能做我想要的,我从来没有在android的文档中读到没有关于不可能做到这一点。

3 个答案:

答案 0 :(得分:1)

资源无法在运行时修改。但您可以使用inflater获取布局视图,然后将视图添加到该布局。

答案 1 :(得分:1)

完全可以在运行时修改布局,无论它是如何创建的。这是一个如何做到这一点的例子。我假设在此示例中,您发布的布局位于文件main.xml中。

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

    ViewGroup main = (ViewGroup) findViewById(R.id.idLay);
    TextView text = new TextView(this);
    text.setText("This is a test!");
    main.addView(text);
}

当然,这不会修改您的资源文件,所以当您下次对它进行充气时,您将不得不再次执行所有步骤。

答案 2 :(得分:0)

findViewById(id)返回一个View,而Layouts是一个Viewgroup。

我建议用你的布局写另一个XML。然后按照您的描述包含它:

mainLayout.add(R.layout.your_custom_layout);