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