android利用回调函数在对话框中传递数据
2015-11-18 23:19
861 查看
android开发中,往往需要在当前activity中打开一个输入框来获取用户数据,但是怎么将输入框的数据传递到activity中呢?
一种方法是创建一个全局变量,在对话框中将数据传递给静态全局变量,然后在当前activity中使用它。这种方式繁琐而且不待见,因为静态全局变量是一直存在的,处理不好会发生很多问题。
另一种方式就是使用回调函数将数据传递回来。
先来看看效果图:
没有数据之前:
打开输入对话框并往对话框中输入数据:
然后按下输入框中的确定按钮,就将数据传递给了打开它的activity:
这里的回调函数,其实就是对对话框进行监听,这里的监听就是回调函数。当对话框完成数据的输入后,回调函数会将数据自动传回到对对话框进行监听的activity中。这样就实现了数据的共享和传递。要实现这样的回调函数很简单,只要定义一个接口,接口里定义一个获取数据的函数就可以了。
具体代码如下:
首先定义简单的布局:
activity的布局和输入框的布局
这里只使用了一个EditText文本框,用来显示从对话框传来的数据,一个Button按钮,用来打开对话框。
接着是自定义对话框的布局:
自定义对话框的布局也比较简单,一个EditText用来输入数据,一个Button确定按钮。
接着在实现自定义对话框的类,这里为了方便,将接口定义在类里面,也可以将接口单独定义。
最后在activity中创建对话框并监听。
很简单的,就是通过接口将activity和dialog关联起来,然后共享数据。
一种方法是创建一个全局变量,在对话框中将数据传递给静态全局变量,然后在当前activity中使用它。这种方式繁琐而且不待见,因为静态全局变量是一直存在的,处理不好会发生很多问题。
另一种方式就是使用回调函数将数据传递回来。
先来看看效果图:
没有数据之前:
打开输入对话框并往对话框中输入数据:
然后按下输入框中的确定按钮,就将数据传递给了打开它的activity:
这里的回调函数,其实就是对对话框进行监听,这里的监听就是回调函数。当对话框完成数据的输入后,回调函数会将数据自动传回到对对话框进行监听的activity中。这样就实现了数据的共享和传递。要实现这样的回调函数很简单,只要定义一个接口,接口里定义一个获取数据的函数就可以了。
具体代码如下:
首先定义简单的布局:
activity的布局和输入框的布局
<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" tools:context=".DialogActivity"> <EditText android:id="@+id/showResult" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/start" android:text="StartActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
这里只使用了一个EditText文本框,用来显示从对话框传来的数据,一个Button按钮,用来打开对话框。
接着是自定义对话框的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/edit" android:layout_width="200dp" android:layout_height="wrap_content" /> <Button android:layout_width="80dp" android:layout_height="60dp" android:id="@+id/sure" android:text="Sure"/> </LinearLayout>
自定义对话框的布局也比较简单,一个EditText用来输入数据,一个Button确定按钮。
接着在实现自定义对话框的类,这里为了方便,将接口定义在类里面,也可以将接口单独定义。
/** * Created by mhwang on 2015/11/18. */ public class MyDialog extends Dialog { //定义接口 public interface DataBackListener{ public void getData(String data); } private EditText editText; private Button btnSure; DataBackListener listener; //创建监听对象 public MyDialog(Context context, final DataBackListener listener) { super(context); //用传递过来的监听器来初始化 this.listener = listener; setContentView(R.layout.dialog); editText = (EditText)findViewById(R.id.edit); btnSure = (Button)findViewById(R.id.sure); btnSure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = editText.getText().toString(); //这里调用接口,将数据传递出去。 listener.getData(str); dismiss(); } }); } }
最后在activity中创建对话框并监听。
public class DialogActivity extends Activity { EditText showResult; Button btnStartDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dialog); showResult = (EditText)findViewById(R.id.showResult); btnStartDialog = (Button)findViewById(R.id.start); btnStartDialog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建对话框对象的时候对对话框进行监听 MyDialog dialog = new MyDialog(DialogActivity.this, new MyDialog.DataBackListener() { @Override public void getData(String data) { String result = data; showResult.setText(result); } }); dialog.show(); } }); }
很简单的,就是通过接口将activity和dialog关联起来,然后共享数据。
相关文章推荐
- Android 接口定义语言AIDL使用解说
- Android Studio 导入Volley模块后 gradle的修改。
- android sqlite cursor 没有返回数据,资源占用问题
- Android常见的两种启动服务的方式
- Android测试教程1--跑起来
- Android图片加载(4)
- android 把一个Activity窗口化的实现
- Android之退出应用关闭项目每个Activity的总结
- android开发笔记:listview
- Android 指纹扫描动画实现,仿新版360手机助手欢迎页
- Android之设置EditText输入类型(setInputType()方法和android:inputType属性)
- Android中 的各种Adapter 整理
- android学习ViewPager的简单使用
- Android快速开发系列 10个常用工具类
- android SQLiteOpenHelper的使用方法
- android开机自启动的几种方法
- Android控件BroadcastReceiver详解
- Android Studio1.4.x JNI开发基础-基本环境配置
- Android ProgressBar的案例
- android蓝牙ble4.0开发