如何设置从android上按下的另一个按钮的文本

时间:2012-11-08 19:44:01

标签: android button view

在我的程序中,当用户按下按钮时,我想根据已经存在的内容将文本设置为其他内容,但它不起作用。 当我点击按钮时,没有任何反应,文本保持不变 这是制作按钮的xml布局。他们称函数为nextVal

<Button
                android:id="@+idk/kbutton1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/zero" />

            <Button
                android:id="@+idk/kbutton3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/x" />

            <Button
                android:id="@+idk/kbutton4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/one" />

名为

的函数
public void nextVal(View view)
    {

        Button b = (Button) findViewById(view.getId());
        System.out.println(b.getText().toString());

        switch(view.getId())
        {
        case R.idk.kbutton4:
            if(b.getText().toString() == "0")
                b.setText("1");
            else if(b.getText().toString() == "1")
                b.setText("x");
            else if(b.getText().toString() == "x")
                b.setText("0");
            break;
        case R.idk.kbutton3:
            if(b.getText().toString() == "0")
                b.setText("1");
            if(b.getText().toString() == "1")
                b.setText("x");
            if(b.getText().toString() == "x")
                b.setText("0");
            break;
        case R.idk.kbutton2:
            if(b.getText().toString() == "0")
                b.setText("1");
            if(b.getText().toString() == "1")
                b.setText("x");
            if(b.getText().toString() == "x")
                b.setText("0");
            break;
        }

    }

3 个答案:

答案 0 :(得分:1)

您在代码中使用了@+idk/case R.idk而不是id,切换所有这些,以便view.getId()知道要返回的内容。例如:

<Button
    android:id="@+id/kbutton3"
    ... />

case R.id.kbutton3:

(我猜测view.getId()目前每个按钮都会返回View.NO_ID。)

答案 1 :(得分:0)

您正在使用==运算符来比较两个字符串。 ==运算符检查引用是否相同,而不是内容是否相同。

相反,你应该使用b.getText.ToString()。equals(“x”);

话虽如此,我还有一些额外的建议。您正在使用findViewById()来查找您已经传递的视图。您可以替换findViewById(view.getId()),只需将View转换为Button。

另外,你可以摆脱switch语句,因为除了混乱代码之外它真的没有用。无论如何你都在做同样的事情,为什么要这么麻烦?只需将其替换为其中一种可能性的内容。

所以你的nextVal()可能看起来像:

    public void nextVal(View view)
    {
        Button b = (Button) view;

        if(b.getText().toString().equals("0")){
                b.setText("1");
        }else if(b.getText().toString().equals("1")){
                b.setText("x");
        }else if(b.getText().toString().equals("x")){
                b.setText("0");
        }
    }

答案 2 :(得分:0)

==运算符不会比较字符串中的字符。请改用.equals()。