0

假设我在我的活动中有这样的方法,并将其设置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,用 获得的 idbutton.getId()总是比用 获得的 id 大 1 R.id.button1。这很容易解决,我只是将我的代码更改为

switch(button.getId() - 1)

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

4

5 回答 5

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 并报告您的发现。

于 2012-07-10T13:14:41.947 回答
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() 属性进行比较。

于 2012-07-10T13:10:24.847 回答
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" />
于 2013-04-14T10:30:48.953 回答
1

有同样的问题。将导入添加到您的类:

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

于 2014-05-01T06:05:47.270 回答
0

我有同样的问题。将导入添加到您的类:

import com.foo.yourapp.R;

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

于 2013-10-08T09:43:34.843 回答