0

在我的程序中,当用户按下按钮时,我想根据已有的内容将文本设置为其他内容,但它不起作用。当我单击按钮时,没有任何反应,文本保持不变 这是制作按钮的 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;
        }

    }
4

3 回答 3

1

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

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

和:

case R.id.kbutton3:

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

于 2012-11-08T19:55:32.060 回答
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");
        }
    }
于 2012-11-08T19:52:43.937 回答
0

== 运算符不比较字符串中的字符。使用 .equals() 代替。

于 2012-11-08T19:57:57.820 回答