【发布时间】:2011-10-10 21:36:31
【问题描述】:
我以编程方式在我的 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();
我认为上面的代码应该在 myContent 线性布局中添加 10 个带有名称的 TextView。但我最终在nameField.setText(...); 得到一个NullPointerException(见上面的代码)为什么?
附注(更新)
myContent 线性布局被添加到 main.xml 中定义的另一个线性布局中,我的活动有 setContentView(R.layout.main)
【问题讨论】:
-
在附加布局之前,您的 setContentView(R.layout.youtrlayoutid) 在哪里?
-
@sat ,查看我的更新,我做了 setContentView(R.id.main),上面所有的布局代码只是我的 main.xml 的一部分,我用上面的代码来实现动态布局功能
-
您应该使用 Inflater 来使用这些文本字段!
-
如果您的 R.id.name_text 在另一个布局中,您必须扩展该布局,然后附加它,因为当您调用 R.id.name_text 的引用时,由于您的布局无法找到它除非膨胀,否则不存在。
-
@sat,你是对的!在我膨胀布局之后,事情就变得正确了。您能否将您的评论移至答案,以便我接受您的答案?
标签: android android-layout android-emulator android-widget android-manifest