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;
  }
}  
}

有没有更简单的方法来做到这一点?当您单击电池模块按钮时,它将显示模块的图像,以及安装它的选项。除图像外,每个模块都相同。如果没有更简单的方法。

4

4 回答 4

3

标签属性是所有视图的一个有用组件,但没有对此进行过多讨论。您可以将视图的标签设置为任何对象:

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

您可以使用它轻松地将标签分配给图像的名称,或者可能是Drawable资源的 id。然后onClick对所有这些按钮使用一种方法,然后简单地解压缩标签以确定应该如何使用它:

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 回答