在自定义Dialog对话框中得到输入值或选择值

2015年01月28日 Android 5条评论 阅读6200次

在自定义Dialog对话框中得到输入值或选择值.

android在Dilaog的创建时可以使用AlertDialog.Builder的方式来实现,如果会有稍复杂的对话框布局内容,我们则可以通过自己在res/layout下添加布局文件,并用Dialog.setContentView(int/View)来得到预期效果。

本文现在要说的就是在自定义的dialog布局中,我们经常会遇到的用用户选择/输入内容,然后会有确认/取消按钮,很显然接下来我们就要关心用户输入/选择的内容如果传递给我们。

Image



在简单使用AlertDialog.Build方式构建Dialog时,我们可以很轻易使用setPositiveButton()、setNegativeButton()来指定确认/取消按钮的监听事件从而得到我们想要的内容。

但在单独布局中,上面那两种方式是行不通的。

下面要说的就是通过自己新增的回调函数来得到自定义Dialog对话框中得到输入或选择值。

大体思路如下:

  1. 1.在自定义dialog类中,增加监听接口,因为取消按钮,基本都是关闭对话框,所以这里只写一个OK按钮的接口。
public interface OnOKListener {
        void getDialogValue(String str);
    }
  1. 2.在继承Dialog的自定义类中,增加上述接口的实例对象
private OnOKListener mOKListener;
  1. 3.在继承Dialog的自定义类的构造函数里,把OnOKListener的实例传递进来
  1. 4.在继承Dialog的自定义类的确认/保存按钮的点击事件中,调用自定义接口的getDialogValue(String)方法

okListener.getDialogValue(String);

想要调用显示该自定义对话框的地方记得别忘记传递OnOKListener即可。

public class CustomDialog extends Dialog implements
        android.view.View.OnClickListener {

    private OnOKListener mOKListener;
    private EditText mNameEt;

    public interface OnOKListener {
        public void getDialogValue(String str);
    }

    public CustomDialog(Context context, OnOKListener l) {
        super(context);
        mOKListener = l;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.dialog_content);
        setTitle("自定义的对话框");
        mNameEt = (EditText) findViewById(R.id.et_name);
        findViewById(R.id.dlg_ok).setOnClickListener(this);
        findViewById(R.id.dlg_cancel).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.dlg_ok:
            String text = mNameEt.getText().toString();
            mOKListener.getDialogValue(text);
            dismiss();
            break;
        case R.id.dlg_cancel:
            dismiss();
            break;

        default:
            break;
        }
    }
}


在想要调用的地方:

findViewById(R.id.show_dlg).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        CustomDialog dialog = new CustomDialog(
                                MainActivity.this, new OnOKListener() {

                                    @Override
                                    public void getDialogValue(String str) {
                                        Toast.makeText(MainActivity.this, str,
                                                Toast.LENGTH_LONG).show();
                                    }
                                });
                        dialog.show();
                    }
                });

如果本文完整工程,请在下面留言即可。

分享本文至:

WRITTEN BY

avatar
本文标签:dialogcallback
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

5 条评论

  1. avatar fdfds

    感谢分享!!!!!

  2. avatar alan

    写的非常好哦。

  3. avatar wmcgoo

    看看输入框可以在编辑的时候弹出输入法吗

  4. avatar wmcgoo

    ,看看输入框可以选中后可以弹出输入法吗

  5. avatar 大大的大孩

    rrrrrrrrrrrrrrf发生地方的手术费是对方答复

欢迎留言




用户登录

sitemap