我目前正在开发一个Android应用程序,并且有一些问题。
1)在我的应用中,有一个电池模块部分。它们将超过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都是一样的。如果没有更简单的方法。
答案 0 :(得分:3)
为此目的未讨论太多的所有视图的一个有用组件是tag属性。您可以将View的标记设置为任何对象:
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.
}
答案 1 :(得分:2)
您可以设置布局文件中每个按钮的onClick回调。类似的东西:
<Button
android:id="@+id/buttonId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buttonText"
android:onClick="onItemClick" />
然后,添加您的活动/片段:
public void onItemClick(View view) {
// Do something in response to button click
}
此处提供更多信息:http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents
答案 2 :(得分: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( ... );
}
答案 3 :(得分: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.
}
}
});
}