0

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

4

1 回答 1

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 来确定哪个被点击

希望有帮助!

于 2012-06-09T23:29:59.423 回答