0

我初始化了一个按钮

按钮 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 当然要容易得多。

有人在Idea中我做错了什么?

4

4 回答 4

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

为什么??

因为当您使用 '==' 进行比较时,它会比较两个对象,无论它是相同的引用。我检查两个对象是否引用相同的内存。

要解决这个问题,您可以检查他们的 id,这很容易比较。

于 2013-04-17T14:44:34.460 回答
1

R.id.button1实际上是 Integer in R.java,它不是 String 或任何其他可以截断为button1. 而是使用:

if(v.getId() == R.id.button1)

同样在 Java 中,您不能==用来测试非原始对象的相等性,您必须使用equals(). 阅读如何比较 Java 中的字符串?

于 2013-04-17T14:45:13.717 回答
1

button1 为空。所以你比较 null 和 not null。改变这个:

final   Button button1 = (Button) findViewById(R.id.button1);

到:

button1 = (Button) findViewById(R.id.button1);

它会起作用。但你最好比较 R.id.button1 和 v.getId() 数字。不看自己。

于 2013-04-17T14:46:12.503 回答
1

正如@Leonidos 所说,改变:

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) {
于 2013-04-19T14:37:24.950 回答