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を押すと、で取得されたIDは、でbutton.getId()取得されたIDよりも常に1大きいことがわかりますR.id.button1。解決するのは非常に簡単です。コードを次のように変更しました。

switch(button.getId() - 1)

しかし、私はそれが好きではなく、ビューのIDを取得するこれら2つの方法の違いを理解したいと思います。

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

同じ問題がありました。クラスにインポートを追加します。

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 に答える