Java 使按钮更改textview的值

Java 使按钮更改textview的值,java,android,variables,button,textview,Java,Android,Variables,Button,Textview,所以,我的朋友让我今天在安卓工作室搞乱了安卓编程。我开始做一个初学者应用程序,并取得了一些好的效果。但是现在我正在尝试使用一个按钮来更改textview的值 下面是按钮和文本视图的代码 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add one" android:id="@+id/b

所以,我的朋友让我今天在安卓工作室搞乱了安卓编程。我开始做一个初学者应用程序,并取得了一些好的效果。但是现在我正在尝试使用一个按钮来更改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"/>
程序编译并打开,但只要我按下按钮,它就会崩溃。我相信我已经把罪魁祸首缩小到了这条线,但我不知道为什么它不起作用

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

有什么想法吗?

当您给布局元素一个要执行的函数时,它会查找接受视图的名称(这样,如果您在XML中为多个元素指定了相同的单击行为,您就知道单击了什么)

所以
addone()
必须是
addone(视图v)

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

威廉·莫里森也有一个很好的观点。您应该通过他所做的或使用Integer类将该数字设置为字符串:

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


重载方法是您的问题。这很微妙,即使是经验丰富的程序员也会犯错误。我以前自己做过

你在打电话。这将尝试加载资源id为numtest的字符串,该字符串不存在

请尝试以下方法:

public void addone(View v){
    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest+"");
}
这将调用,这是您真正想要做的

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

这应该可以:

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;
    }
}

我认为这不是问题所在,但是感谢您捕获方法签名定义。如果不是你,我会错过它。@williammerrison这不是唯一的问题,但是如果没有正确的签名+1对问题的正确解释,它将找不到方法。您可能只想在文档中包含链接,以供将来参考,这样人们就可以确切地知道在哪里可以找到这些东西+1很好的解释,但我认为您应该指出方法签名中的错误,如下所示well@codeMagic固定的。仅仅键入其他用户所做的事情就感觉不对。但是我觉得我的捕获更重要。。。我们很快就会看到真正的答案。我打赌:)编译器毕竟无法捕获意外的重载方法调用。它们都同样重要,因为它们都是必需的。如果他们抓到了你一开始没有抓到的东西,只要你给予表扬,就不要难过。不,它不能捕获它,但它将在运行时被捕获,因此仍然非常重要。这很有道理。“一定要对锇的回答投赞成票”看看你,说话像个真正的绅士,所以用户;)这就是这个社区所要做的…学习和尊重确保您查看日志,它可以帮助您了解错误的来源。
public void addone(View v){
    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest+"");
}
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;
    }
}