为什么在以编程方式添加文本视图时出现NullPointerException?

时间:2011-07-22 09:10:47

标签: android android-layout android-emulator android-widget android-manifest

我在Activity中以编程方式创建了一个线性布局,如下所示:

LinearLayout myContent = new LinearLayout(this);
myContent.setOrientation(LinearLayout.VERTICAL);

然后,我在xml中定义了一个文本视图(在res / layout /下面),如下所示:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/name_text"
    android:layout_width="80dp"
    android:layout_height="40dp"
    android:gravity="center"
/>

之后,我想将以上定义的几个TextView添加到myContent线性布局,如下所示:

//my content is a linear layout
LinearLayout myContent = new LinearLayout(this);
myContent.setOrientation(LinearLayout.VERTICAL);

for(int i=0; i<10; i++){
  //get my text view resource
  TextView nameField = (TextView)findViewById(R.id.name_text);


  nameField.setText("name: "+Integer.toString(i)); //NullPointerException here
}

myContent.addView();

我认为上面的代码应该将10 TextView名称添加到myContent线性布局中。但我最终在nameField.setText(...);处遇到了 NullPointerException (参见上面的代码)为什么?

P.S。 (更新)

myContent线性布局添加到另一个在main.xml中定义的线性布局,我的活动 setContentView(R.layout.main)

4 个答案:

答案 0 :(得分:6)

如果您的R.id.name_text在另一个布局中,则必须对该布局进行充气,然后将其附加,
因为当你引用R.id.name_text时,找不到它,因为你的布局不存在,除非它被夸大了。

e.g。

查看child = getLayoutInflater()。inflate(R.layout.child);
myContent.addView(子);

答案 1 :(得分:2)

问题出在这一行

 TextView nameField = (TextView)findViewById(R.id.name_text);

。看到布局文件中的拼写不匹配。还要确保setContentView(R.layout.main);我运行了你的代码。运行正常。

答案 2 :(得分:0)

您没有使用布局文件调用setContentView(...)。听起来你可能想要做的是在代码中创建10个视图并将一些样式应用于它们。

您无法使用findViewById(...)访问这10个视图,因为您的布局文件只指定了一个视图。您还可以将该布局导入10次,并将LinearLayout定义为父视图。

答案 3 :(得分:0)

查看此Link复选框。你正在做的是动态地创建一个布局并使用xml,只需选择一个。