我正在尝试创建一个可重用的UI类。我承认我不明白它应该如何运作。我希望有一个我传递参数的类,当用户进行选择时,它将返回所选的值。这实际上是一个将要使用的更复杂的自定义对话框。为了进行测试,我将以下代码放在我发现的示例中,它会执行所有操作,但会返回所选的值。
那么,如何在主例程中返回用户选择的值?
主要模块 包com.mine.zd;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ZDialogActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0){
go();
}
});
}
private void go()
{
final String[] vOptions = { "One", "Two", "Three" } ;
myOptions.getmenuOptions(
ZDialogActivity.this, "Select Mode", vOptions,
new android.content.DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Log.w("TEST", "which=" + which );
}
}
);
}
}
调用模块
package com.mine.zd;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.util.Log;
public class myOptions {
public static void getmenuOptions(Context context, String msg,
String[] vOptions, OnClickListener neutralClickListener){
new AlertDialog.Builder(context)
.setTitle("Select Mode")
.setItems(vOptions, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Log.w("TEST", "item=" + whichButton );
dialog.dismiss();
}
})
.setNeutralButton("Cancel", neutralClickListener )
.create().show();
}
}
我的返回“取消”按钮值为-3,但我需要选择选项的ID。
答案 0 :(得分:1)
这是怎么回事:
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.your.package.MyOptions.MyDialogClickListener;
public class ZDialogActivity extends Activity implements View.OnClickListener, MyDialogClickListener {
private MyOptions options;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.btn1).setOnClickListener(this);
String[] vOptions = { "One", "Two", "Three" };
options = new MyOptions(vOptions, this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
go();
break;
default:
Log.e("TEST", "Unhandled onClick");
break;
}
}
private void go() {
options.getMenuOptions(this, "Select Mode");
}
@Override
public void onMyDialogClick(String option){
Log.d("TEST", "item=" + option);
}
}
你的助手班:
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
public class MyOptions implements OnClickListener {
private final MyDialogClickListener listener;
private final String[] options;
public interface MyDialogClickListener {
void onMyDialogClick(String option);
}
public MyOptions(String[] options, MyDialogClickListener listener) {
this.options = options;
this.listener = listener;
}
public void getMenuOptions(Context context, String msg) {
new AlertDialog.Builder(context)
.setTitle(msg)
.setItems(options, this)
.setNeutralButton("Cancel", this)
.create()
.show();
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(listener != null)
listener.onMyDialogClick(options[which]);
dialog.dismiss();
}
}
1)用大写
开始你的类名2)不要使用静态帮助器方法,在这种情况下实例化它更好的类
3)然后,您可以将非更改字段传递给构造函数
4)使用接口在类之间发送消息(您的Activity充当对话框onClick事件的监听器)
5)不要使用烦人的onClick监听器让你的类实现它并打开视图id以使其被点击
希望有所帮助!