使按钮更改textview的值

时间:2013-07-30 22:55:46

标签: java android variables button textview

所以,我的朋友让我今天在Android工作室搞乱了android编程。我开始制作初学者应用程序并取得了一些好成绩。但是现在我正试图通过一个按钮来改变textview的值。

以下是按钮和textview的代码

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add one"
        android:id="@+id/button3"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignRight="@+id/textView"
        android:layout_toRightOf="@+id/button"
        android:onClick="addone"/>

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/counter"
        android:textSize="40dp"
        android:layout_alignTop="@+id/button3"
        android:layout_centerHorizontal="true"/>

以下是试图更改文本视图值的代码。

public void addone(){

    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest);

}

程序编译并打开,但只要按下按钮就会崩溃。我相信我已经把罪魁祸首缩小到这条线,但我不确定为什么它不起作用

TextView t = (TextView) findViewById(R.id.counter);

有什么想法吗?

3 个答案:

答案 0 :(得分:9)

重载方法是你的问题。它是微妙的,即使是经验丰富的程序员也可能犯的错误。我以前做过。

您正在呼叫TextView.setText(Integer)。这会尝试加载资源ID为numtest的字符串,该字符串不存在。

请改为尝试:

public void addone(View v){
    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest+"");
}

这会调用TextView.setText(CharSequence),而这正是你真正要做的事情。

此外,正如Osmium USA所示,您的方法签名不正确。按下的按钮回调方法必须接受一个视图,并且必须是公共的。

答案 1 :(得分:6)

当你为一个布局元素提供一个要执行的函数时,它会查找接受一个视图的名称(如果你在XML中为多个元素分配了相同的点击行为,你就知道点击的内容了。)

因此addone()必须为addone(View v)

From the Button Docs

  

为了使其正常工作,该方法必须是公共的,并接受View作为其唯一参数

威廉莫里森也有一个好点。您应该根据他所做的或使用整数类来使该数字成为字符串:

t.setText(Integer(numtest).toString());

t.setText(numtest+"");

答案 2 :(得分:0)

这应该有效:

public void addone(View view){
    switch(view.getId())
    {
        case R.id.button3:
            numtest+=1;
            TextView t = (TextView) findViewById(R.id.counter);
            t.setText(Integer.toString(numtest));
        break;
    }
}