android将变量从类传回
我正在尝试创建一个可重用的UI类。我承认我不明白它应该如何工作。我希望有一个类,我将参数传递给它,当用户做出选择时,它将返回所选的值。这实际上是一个更复杂的自定义对话框。为了进行测试,我从我找到的示例中将下面的代码放在一起,它除了返回所选的值之外,什么都做 那么,如何在主例程中获取用户选择的值呢 主模块 包com.mine.zdandroid将变量从类传回,android,android-alertdialog,Android,Android Alertdialog,我正在尝试创建一个可重用的UI类。我承认我不明白它应该如何工作。我希望有一个类,我将参数传递给它,当用户做出选择时,它将返回所选的值。这实际上是一个更复杂的自定义对话框。为了进行测试,我从我找到的示例中将下面的代码放在一起,它除了返回所选的值之外,什么都做 那么,如何在主例程中获取用户选择的值呢 主模块 包com.mine.zd import android.app.Activity; import android.content.DialogInterface; import android.
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。这里如何:
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) 使用接口在类之间发送消息(您的活动充当对话框onClick事件的侦听器)
5) 不要使用恼怒的onClick监听器,让您的类实现它并打开所单击的视图id
希望有帮助 在
myOptions.getMenuOptions(…)
方法中调用setItems(…)
时,与其创建一个匿名OnClickListener
,为什么不尝试将neutralClickListener
传递到setItems(…)
中呢?