你好,我有这个代码:
this.firstBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
final CharSequence[] items = {"1", "2", "3"};
AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
builder.setTitle("test");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
langFrom.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
this.secondBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
final CharSequence[] items = {"1", "2", "3"};
AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
builder.setTitle("test");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
langFrom.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
});只有两个不同的部分:this.firstBtn和this.secondBtn,有没有办法将它们合并?例如,当我单击firstBtn时,它调用一个函数foo(firstBtn),而secondBtn调用foo(secondBtn),其余的工作方式是一样的吗?我对语法等不太确定,因为我现在刚接触Java和Android开发。
谢谢
发布于 2011-08-10 10:07:47
你想要的东西可以相对容易地完成。您可以定义一个实现OnClickListener的新类,并在这两个位置使用该类的新实例。
class MyOnClickListener implements OnClickListener {
public void onClick(View v) {
final CharSequence[] items = {"1", "2", "3"};
AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
builder.setTitle("test");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
langFrom.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}然后,您的代码可以看起来像这样:
this.firstBtn.setOnClickListener(new MyOnClickListener());
this.secondBtn.setOnClickListener(new MyOnClickListener());显然,如果您的两个MyOnClickListener需要稍有不同,则可以进一步采用此解决方案。这可以通过创建一个构造函数来实现,该构造函数接受您想要更改的参数,并将它们存储为成员变量,然后在调用onClick(...)时使用这些成员变量
class MyOnClickListener implements OnClickListener {
private CharSequence[] items;
public MyOnClickListener(CharSequence[] _items) {
items = _items;
}
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
builder.setTitle("test");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
langFrom.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}然后可以像这样使用:
final CharSequence[] items1 = {"1", "2", "3"};
final CharSequence[] items2 = {"2", "3", "4"};
this.firstBtn.setOnClickListener(new MyOnClickListener(items1));
this.secondBtn.setOnClickListener(new MyOnClickListener(items2));更新
public class SlovnikoidActivity extends Activity {
//slovnikoidActivity definition
//inner class definition for MyOnClickListener
class MyOnClickListener implements OnClickListener {
private CharSequence[] items;
public MyOnClickListener(CharSequence[] _items) {
items = _items;
}
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
builder.setTitle("test");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
langFrom.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
}发布于 2011-08-10 13:18:42
作为nicholas.hausChild的替代方案,如果你不想创建一个单独的类,就让你的activity实现View.OnClickListener。
然后,将onClick(View v)方法移动到按钮代码所在的同一个类中。如果您需要区分不同的按钮,那么只需执行switch (v.getId())。
https://stackoverflow.com/questions/7005059
复制相似问题