我是Android开发和这些论坛的新手,所以如果您能提供帮助,我将不胜感激。我环顾四周,尝试了其他一些答案,但无法到达任何地方。
我编写了一个从ArrayList返回随机字符串的Java方法。我在主活动布局XML上有三个TextView元素,我想在按下按钮时设置它(运行方法生成三个随机字符串)。
我如何这样做,每当我在手机上运行应用程序时,它崩溃所以显然存在一个重大缺陷。
这是我打电话的方法
public void generateExercises() {
Exercise e1 = new Exercise();
Exercise e2 = new Exercise();
Exercise e3 = new Exercise();
e1.generateExercise();
e2.generateExercise();
e3.generateExercise();
RelativeLayout lView = new RelativeLayout(this);
myText1 = (TextView)findViewById(R.id.myText1);
myText1.setText(e1.getName());
myText2 = (TextView)findViewById(R.id.myText2);
myText2.setText(e2.getName());
myText3 = (TextView)findViewById(R.id.myText3);
myText3.setText(e3.getName());
lView.addView(myText1);
lView.addView(myText2);
lView.addView(myText3);
setContentView(lView);
}
//XML File
<TextView
android:id="@+id/myText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/exercise2title"
android:layout_alignBottom="@+id/exercise2title"
android:layout_alignLeft="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/myText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/exercise3title"
android:layout_alignBottom="@+id/exercise3title"
android:layout_alignLeft="@+id/TextView01"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/exercise1title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/title"
android:layout_marginLeft="39dp"
android:layout_marginTop="64dp"
android:text="@string/exercisetitle_one"
android:textAppearance="?android:attr/textAppearanceMedium" />
由于
编辑:用“myText1”
错过了XML部分 <TextView
android:id="@+id/myText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/exercise1title"
android:layout_alignBottom="@+id/exercise1title"
android:layout_alignRight="@+id/title"
android:layout_marginRight="24dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
编辑:感谢您的所有帮助,代码现在按预期工作。我还必须使用自定义onClick侦听器替换XML onclick方法。
答案 0 :(得分:1)
我想你需要将它设置为Contentview,因为你将Text添加到TextViews。您尝试向TextView添加尚未创建的文本。
在向其添加文本之前,请尝试设置contentView。如果我知道它是正确的,您不需要将TextView添加到lView,因为您实际上是在XML文件中完成的。 实际上,您确实在XML中定义了布局,因此您无需再次在代码中创建它。只需在XML中创建布局并立即填写即可。
public void generateExercises() {
Exercise e1 = new Exercise();
Exercise e2 = new Exercise();
Exercise e3 = new Exercise();
e1.generateExercise();
e2.generateExercise();
e3.generateExercise();
setContentView(R.layout.*****); //putyour layoutname here
myText1 = (TextView)findViewById(R.id.myText1);
myText1.setText(e1.getName());
myText2 = (TextView)findViewById(R.id.myText2);
myText2.setText(e2.getName());
myText3 = (TextView)findViewById(R.id.myText3);
myText3.setText(e3.getName());
}
这可以做你想做的事情
答案 1 :(得分:0)
public void generateExercises() {
setContentView(R.layout.xml_file_name);
Exercise e1 = new Exercise();
Exercise e2 = new Exercise();
Exercise e3 = new Exercise();
e1.generateExercise();
e2.generateExercise();
e3.generateExercise();
myText1 = (TextView)findViewById(R.id.myText1);
myText1.setText(e1.getName());
myText2 = (TextView)findViewById(R.id.myText2);
myText2.setText(e2.getName());
myText3 = (TextView)findViewById(R.id.myText3);
myText3.setText(e3.getName());
}
答案 2 :(得分:0)
从onCreate方法调用setContentView(lView)。
之后,您可以获取/设置textViews:
myText1 = (TextView)findViewById(R.id.myText1);
myText1.setText(e1.getName());
您不需要使用addView,因为lView中已存在视图(您已在xml中设置它们)。
基本上,
将contentView设置为lView将采用xml布局并使用所有视图创建它。之后,您会找到包含myText1 = (TextView)findViewById(R.id.myText1);
的文字视图,然后使用myText1.setText(e1.getName());
查看logcat输出以查看出现了什么问题也很有用,并尝试调试&#39; eclipse的特性,断点设置为&#39; nullPointerException&#39;。在这里发布logcat输出可以让我们快100倍,找出问题所在!
答案 3 :(得分:0)
XML中的myText1在哪里?
myText1 = (TextView)findViewById(R.id.myText1);
myText1.setText(e1.getName()); //NPE here?