OnClick没有获得真正的按钮ID

时间:2013-04-17 14:39:32

标签: android

我用

初始化了一个按钮
  

按钮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当然更容易。

有人知道我做错了吗?

4 个答案:

答案 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)

@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) {