android从类中传回变量

时间:2012-06-09 22:18:02

标签: android android-alertdialog

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

1 个答案:

答案 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以使其被点击

希望有所帮助!