1

私は現在、Android アプリケーションに取り組んでおり、いくつか質問がありました。

1) 私のアプリには、Battery Mod セクションがあります。そのためのボタンは 50 個以上になります。したがって、次のようなことをする代わりに:

 public class MyActivity extends Activity implements OnClickListener {

  @Override public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     Button buttonA = (Button) findViewById(R.id.buttonA);    
     buttonA.setOnClickListener(this);
     Button buttonB = (Button) findViewById(R.id.buttonB); 
     buttonB.setOnClickListener(this);
  }

//etc... etc...

public void onClick(View v) {

  switch (v.getId()) {
     case R.id.buttonA: 
      // do something
      break;
     case R.id.buttonB:
      // do something else
      break;
  }
}  
}

これを行う簡単な方法はありますか?バッテリー MOD ボタンをクリックすると、MOD の画像とインストール オプションが表示されます。画像以外は各modとも同じです。もっと簡単な方法がなければ。

4

4 に答える 4

3

この目的であまり議論されていない、すべてのビューに役立つコンポーネントの 1 つは、タグ属性です。ビューのタグを任意のオブジェクトに設定できます。

Object foo = new Object();
button1.setTag(foo);

これを使用して、タグをイメージの名前またはリソースの ID に簡単に割り当てることができますDrawable。次にonClick、これらすべてのボタンに対して 1 つのメソッドを使用し、タグを展開して使用方法を決定します。

public void onClick(View v)
{
    //any button was clicked. Now determine what to do using the tag.

    Object tag = v.getTag();
    //TODO: use tag.


}
于 2013-02-18T21:09:54.837 に答える
2

レイアウト ファイル内の各ボタンの onClick コールバックを設定できます。何かのようなもの:

<Button
    android:id="@+id/buttonId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/buttonText"
    android:onClick="onItemClick" />

次に、Activity/Fragment を追加します。

public void onItemClick(View view) {
    // Do something in response to button click
}

詳細はこちら: http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents

于 2013-02-18T22:05:20.620 に答える
1

ボタンを次のように繰り返すことができます-

int[] buttons = { R.id.button1, R.id.button2, ... , R.id.button30 };

for( int i=0; i < buttons.length; i++ ) {
    final Button b = (Button) findViewById( buttons[ i ] );
    b.setOnClickListener( ... );
}
于 2013-02-18T20:40:32.623 に答える
0

異なるのはIDです。したがって、それをループすることはできず、次のように入力する必要があります。

private static final BUTTON_IDS={R.id.buttonA,R.id.buttonB,R.id.buttonC....R.id.buttonZ};

次にループします:

    for(int i=0;i<BUTTON_IDS.lenght;i++{
        Button buttonXYZ = (Button) findViewById(BUTTON_IDS[i]);    
        buttonXYZ.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                    if(...){
                        //your spical cases
                    }
                    else{
                        //do awesome generic stuff.
                    }

                    }
                });
    }
于 2013-02-18T20:40:23.387 に答える