Android自定义AlertDialog对话框并回传Activity参数

来源:互联网 发布:vb soapclient 编辑:程序博客网 时间:2024/06/05 11:30

需求

开发过程总会想要自己设计的对话框,有时候还需要在activity获取对话框的一些操作结果。

思路

1.自定义对话框,并继承AlertDialog
2.在自定义对话框中,定义一个接口,并声明一个方法,将操作结果作为方法参数
3.在activity中,创建自定义对话框类,并调用自定义的接口,获取操作结果

项目需求

主界面弹出对话框,并在主界面显示对话框输入的内容。(只为实现功能,比较简单)

示例图

这里写图片描述

代码示例

写的比较匆忙,代码不是很规范~
1.布局文件
1)activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button         android:id="@+id/btn_input_confirm"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="确定输入密码 "        android:layout_gravity="center_horizontal"/>    <TextView        android:id="@+id/tv_password_result"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"/></LinearLayout>

2)dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     android:background="#c7c7c7">    <EditText        android:id="@+id/et_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入6位数的密码"         android:gravity="center_horizontal"        android:layout_margin="20dp"/>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"         android:layout_margin="20dp">        <Button             android:id="@+id/btn_confirm"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="确定 "/>        <Button             android:id="@+id/btn_cancel"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="取消"/>    </LinearLayout></LinearLayout>

2.自定义对话框InputDialog.java

import android.app.AlertDialog;import android.content.Context;import android.os.Bundle;import android.widget.Button;import android.widget.EditText;import android.view.View;import android.view.View.OnClickListener;public class InputDialog extends AlertDialog implements OnClickListener{    private EditText etPassword;  //编辑框    private Button btnConfrim, btnCancel;  //确定取消按钮    private OnEditInputFinishedListener mListener; //接口    public interface OnEditInputFinishedListener{        void editInputFinished(String password);    }    protected InputDialog(Context context, OnEditInputFinishedListener mListener) {        super(context);        this.mListener = mListener;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.dialog_layout);        //控件        etPassword = (EditText)findViewById(R.id.et_password);        btnConfrim = (Button)findViewById(R.id.btn_confirm);        btnCancel = (Button)findViewById(R.id.btn_cancel);        btnConfrim.setOnClickListener(this);        btnCancel.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if (v.getId() == R.id.btn_confirm) {            //确定            if (mListener != null) {                String password = etPassword.getText().toString();                mListener.editInputFinished(password);            }            dismiss();        }else {            //取消            dismiss();        }    }}

3.MainActivty

import com.example.dialogtest.InputDialog.OnEditInputFinishedListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {    private TextView tvPasswordResul;      private Button btnInput;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tvPasswordResul = (TextView) findViewById(R.id.tv_password_result);        btnInput = (Button) findViewById(R.id.btn_input_confirm);        btnInput.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                InputDialog dialog = new InputDialog(MainActivity.this, new OnEditInputFinishedListener(){                    @Override                    public void editInputFinished(String password) {                        tvPasswordResul.setText(password);                }            });                dialog.setView(new EditText(MainActivity.this));  //若对话框无法弹出输入法,加上这句话                dialog.show();            }        });    }}

注意:在自定义的对话框如果不能弹出输入法,就在show()方法调用之前,用setView(new EditText())添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以这个空的,没有其他影响。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 住在亲戚家里怎么办暂住证 舍不得花40块钱怎么办 空调铜管折弯了怎么办 沈阳学叉车证怎么办 幼儿老师教不会怎么办 学东西学不会怎么办 学不会汽修怎么办 挖掘机发票丢了怎么办 工会经费多缴怎么办 机票姓名错了怎么办 抹胸衣服下掉怎么办 穿抹胸很容易掉怎么办 抹胸衣服老掉怎么办 群里有低俗的人怎么办 老师不收礼物怎么办 发票跨年了怎么办 一用力就头疼怎么办 小孩天天玩游戏怎么办 手机分期人死了怎么办 人死了手机欠费怎么办 晚上想玩手机怎么办 孩子溺水后发烧怎么办 去台湾多次签证怎么办 怀孕不能玩手机怎么办 孕期天天玩手机怎么办 小孩子在家偷钱怎么办 小朋友被鸡抓伤怎么办 宝宝在学校不说怎么办? 宝宝不和小朋友玩怎么办 初中孩子不想上学怎么办 孩子装病不想上学怎么办 中学生叛逆不愿意上学怎么办 孩子去幼儿园哭闹怎么办 孩子哭闹不上学怎么办 孩子中班还哭怎么办 小孩子不爱上幼儿园怎么办 小孩子不爱去幼儿园怎么办 宝宝去幼儿园哭闹怎么办 宝宝上幼儿园哭闹怎么办 小朋友上幼儿园哭闹怎么办 迷路了怎么办幼儿故事