Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android将变量从类传回_Android_Android Alertdialog - Fatal编程技术网

android将变量从类传回

android将变量从类传回,android,android-alertdialog,Android,Android Alertdialog,我正在尝试创建一个可重用的UI类。我承认我不明白它应该如何工作。我希望有一个类,我将参数传递给它,当用户做出选择时,它将返回所选的值。这实际上是一个更复杂的自定义对话框。为了进行测试,我从我找到的示例中将下面的代码放在一起,它除了返回所选的值之外,什么都做 那么,如何在主例程中获取用户选择的值呢 主模块 包com.mine.zd import android.app.Activity; import android.content.DialogInterface; import android.

我正在尝试创建一个可重用的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。

这里如何:

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(…)
中呢?