我用
初始化了一个按钮按钮button1 = null;
在我的活动开始时。 设置布局后,我
final Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);
onClick看起来像那样
public void onClick(View v) {
if(v == button1) {System.out.println("asd");};
System.out.println(v);
}
打印显示"I/System.out(22758): android.widget.Button@**405632f0**"
,当然,println(“asd”)没有显示。
我不想为每个按钮获取Button @ ** 代码,因为使用id当然更容易。
有人知道我做错了吗?
答案 0 :(得分:2)
而不是
public void onClick(View v) {
if(v == button1) {System.out.println("asd");};
System.out.println(v);
}
使用此
public void onClick(View v) {
if(v.getId() == R.id.button1) {System.out.println("asd");};
System.out.println(v);
}
<强> WHY ?? 强>
因为当您使用'=='进行比较时,它正在比较两个对象,它们是相同的引用。我检查两个对象是否指向同一个内存。
要解决此问题,您可以检查他们的ID,这很容易比较。
答案 1 :(得分:1)
R.id.button1
实际上是R.java
中的一个整数,它不是字符串或其他任何可以截断为button1
的内容。而是使用:
if(v.getId() == R.id.button1)
同样在Java中,您不能使用==
来测试非基本对象的相等性,必须使用equals()
。阅读How do I compare strings in Java?
答案 2 :(得分:1)
button1为空。所以你比较null而不是null。 改变这个:
final Button button1 = (Button) findViewById(R.id.button1);
为:
button1 = (Button) findViewById(R.id.button1);
它会起作用。但是你最好比较R.id.button1和v.getId()数字。不是观点本身。
答案 3 :(得分:1)
final Button button1 = (Button) findViewById(R.id.button1);
为:
button1 = (Button) findViewById(R.id.button1);
并且,是的,你可以比较引用:如果你看到android源代码有两种策略:有些人比较崇敬:
if (v == mSomeButton) {
和一些使用id如:
if (v.getId() == R.id.some_button) {