我在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 (参见上面的代码)为什么?
myContent
线性布局添加到另一个在main.xml中定义的线性布局,我的活动有 setContentView(R.layout.main)
答案 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,只需选择一个。