Android - 使用方法设置字符串变量

时间:2013-01-17 22:56:12

标签: java android

我是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方法。

4 个答案:

答案 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?