假设我的活动中有这样的方法,并将其设置为不同按钮的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的方法之间的区别。
答案 0 :(得分:3)
做了一些测试,我得到了相同的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并报告您的发现。
答案 1 :(得分:2)
您应该将已知按钮与印刷机进行比较。
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()属性进行比较。
答案 2 :(得分:1)
我想我遇到了同样的问题。希望你和我一样,我的经验可以解决你的问题。
我遇到了这个问题,因为我错误地将id值放在相对布局中。请参阅此示例,layout_alignTop
和layout_toRightOf
的值错误。它们不应包含+
符号。我不知道你是否也这样做过。但它会导致id值混乱。
<ImageButton
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/btn_start"
android:layout_toRightOf="@+id/btn_start"
android:contentDescription=""
android:src="@drawable/forward" />
答案 3 :(得分:1)
有同样的问题。添加导入到您的班级:
import com.foo.yourapp.R; 它解决了问题。我不知道这种行为的原因。 import com.foo.yourapp.R;
答案 4 :(得分:0)
我有同样的问题。添加导入到您的班级:
import com.foo.yourapp.R;
它解决了问题。我不知道这种行为的原因。