View.getId和R.id.viewLabel返回不同的值

假设我有一个这样的方法进入我的活动,并将其设置为不同按钮的onClick字段为xml:

 public void onButtonPressedFromView(View button) { switch(button.getId()) { case (R.id.button1) : //do something break; case (R.id.button2) : //do something different break; default : //default action break; } } 

结果是,如果我按下例如button1,则使用button.getId()获得的id总是大于使用R.id.button1获得的id的1。 它很容易解决,我只是将代码更改为

switch(button.getId() - 1)

但我不喜欢它,并想了解这两种获取视图ID的方法之间的区别。

您应该将已知按钮与印刷机进行比较。

 onCreate(...) { ... Button myButton1 = (Button)findViewById(R.id.somebutton); Button myButton2 =.... } public void onButtonPressedFromView(View button) { switch(button.getId()) { case (myButton1.getId()) : //do something break; case (myButton2.getId()) : //do something different break; default : //default action break; } } 

重要的是不要假设myButton ==按钮。 例如,如果在ListView中使用按钮,它可能会有多个实例,因此只能通过getId()属性进行比较。

做了一些测试,我得到了相同的Id

  TextView tv= (TextView ) findViewById(R.id.my_textview); Log.i("Test.java","ID 1 : " +R.id.my_textview); Log.i("Test.java","ID 2 : " +findViewById(R.id.my_textview).getId() ); Log.i("Test.java","ID 3 : " +tv.getId() ); tv.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Log.i("Test.java","ID 4 : " +arg0.getId() ); } }); 

这是我的日志:

 07-10 15:10:19.906: I/Test.java(3680): ID 1 : 2131165227 07-10 15:10:19.906: I/Test.java(3680): ID 2 : 2131165227 07-10 15:10:19.906: I/Test.java(3680): ID 3 : 2131165227 07-10 15:10:21.386: I/Test.java(3680): ID 4 : 2131165227 

尝试使用onClick并报告您的发现。

我想我遇到了同样的问题。 希望你和我一样,我的经验可以解决你的问题。

我有这个问题,因为我错误地将id值放在相对布局中。 看到这个例子, layout_alignToplayout_toRightOf值是错误的。 它们不应包含+号。 我不知道你是否也这样做过。 但它会导致id值凌乱。

  

有同样的问题。 向您的class级添加导入:

import com.foo.yourapp.R; 它解决了问题。 我不知道这种行为的原因。 import com.foo.yourapp.R;

我有同样的问题。 向您的class级添加导入:

 import com.foo.yourapp.R; 

它解决了问题。 我不知道这种行为的原因。