Dialog中获得用户填写的数据

创建一个View对象,由View提供输入的控件和布局(一般我们通过LayoutInflater将xml布局文件转换成View对象)

创建一个Builder对象

将第一步创建的View对象设置到Builder中。

创建按钮和设置回调函数

根据之前配置的Builder生成Dialog对象

调用Dialog.show()将生成的Dialog显示出来

所以我们先创建xml布局文件,这个布局最终会放到Dialog中。prompt_view.xml:

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

 

<TextView android:id="@+id/promptmessage"

android:layout_height="wrap_content" android:layout_width="wrap_content"

android:layout_marginLeft="20dip" android:layout_marginRight="20dip"

android:text="请在这里输入信息:" android:gravity="left"

android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText android:id="@+id/editText_prompt"

android:layout_height="wrap_content" android:layout_width="fill_parent"

android:layout_marginLeft="20dip" android:layout_marginRight="20dip"

android:scrollHorizontally="true" android:autoText="false"

android:capitalize="none" android:gravity="fill_horizontal"

android:textAppearance="?android:attr/textAppearanceMedium" />

  1. </LinearLayout>

然后将这个xml布局文件转换成View:

LayoutInflater li = LayoutInflater.from(this);

View view = li.inflate(R.layout.prompt_view, null);

将View放到Builder中,设置按钮和回调函数,然后调用builder的create方法创建Dialog对象并将这个dialog显示出来。

public void onShowPromptDialog(View v){

//inflate需要显示到Dialog里的View对象

LayoutInflater li = LayoutInflater.from(this);

View view = li.inflate(R.layout.prompt_view, null);

 

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("prompt测试");

builder.setIcon(R.drawable.icon);

//之前inflate的View 放到dialog中

builder.setView(view);

builder.setPositiveButton("确定", this);

builder.setNegativeButton("取消", this);

builder.show();

}

这边我们设置回调方法由Activity代理处理,所以Activity需要implements DialogInterface.onClickListener

 

public class DemoDialog extends Activity implements DialogInterface.OnClickListener {

}

然后为Activity添加未实现的onClick方法:

@Override

public void onClick(DialogInterface dialog, int which) {

 

if(which == Dialog.BUTTON_POSITIVE){

 

AlertDialog ad = (AlertDialog) dialog;

EditText t = (EditText) ad.findViewById(R.id.editText_prompt);

Toast.makeText(this, t.getText().toString(), Toast.LENGTH_LONG)

.show();

}

 

}

这边我们做的处理是:判断Dialog中被点击的是否是确定按钮,如果是则从dialog中查找提供输入的View控件(EditText),然后获取用户填写的内容用Toast显示出来。onClick方法会将当前被点击的Dialog当成第一个参数,然后点击的按钮id当成第二个参数调用回调函数,由于第一个参数的类型所有Dialog的基类接口DialogInterface所以需要强制转换成AlertDialog对象才可以将View查找出来,第二个参数按钮ID,则会有三种值,因为AlertDialog最多可以有3个按钮,Dialog类中提供了对于这3个按钮对应的静态变量值,所以可以通过将button id和这3个静态变量值比较来获得用户点击的是哪个按钮。

在Android中使用PromptDialog有个需要注意的地方是,因为Android中Dialog都是异步模式,所以你无法在将Dialog显示出来后马上就查找Dialog中的输入框,然后获取输入值,因为这时候用户才看到输入框并没有填入值,所以获取输入值,并进行后续处理必须写在回调方法里。

        • 0
          点赞
        • 1
          收藏
          觉得还不错? 一键收藏
        • 0
          评论
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值