Dialog中更新Activity的数据显示
2014-12-29 22:35
330 查看
[align=left]假设有一个activity,activity中有一个Button和一个TextView,点击按钮,弹出Dialog,对话框中有一个ListView,选中ListView中的某一项,关闭对话框,更新activity中EditText的值为你选中项的值。[/align]
[align=left]分析这个问题,假设Dialog为AlertDialog,你可以直接在Button的OnClickListener事件中创建Dialog,并在AlertDialog的setPositiveButton或其他按钮监听器中完成对EditText值的更新;如果Dialog为自定义Dialog,你也完全可以将这个自定义Dialog以Activity内部类的方式实现,这样在Dialog中ListView的选择事件监听器中你仍然可以访问到EditText。[/align]
[align=left]但是我不喜欢以这样的方式来实现,不管是代码复杂度的原因还是耦合的原因,总之我还是喜欢将自定义Dialog使用单独的类来创建。这样的话,在Dialog中你就访问不到Activity的EditText了,除非你将EditText的设为public(这当然不是一个好方法)。 网上查了下,发现可以通过回调函数来实现,仍然使用上一篇文章当中用到的自定义对话框作为例子,具体步骤如下:[/align]
[align=left]1.新建一个接口作为Dialog的监听器,并在接口中声明回调函数:[/align]
2、为自定义Dialog增加带监听器参数的构造函数:
3、在Dialog中需要的地方去调用回调函数,比如在ListView的选择事件触发时:
4、然后你在Activity中使用带监听器参数的构造函数去实例化自定义Dialog,并实现监听器中声明的回调函数就可以了:
解析(创建自定义对话框):
R.style.dlg_priority设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:
[align=left]分析这个问题,假设Dialog为AlertDialog,你可以直接在Button的OnClickListener事件中创建Dialog,并在AlertDialog的setPositiveButton或其他按钮监听器中完成对EditText值的更新;如果Dialog为自定义Dialog,你也完全可以将这个自定义Dialog以Activity内部类的方式实现,这样在Dialog中ListView的选择事件监听器中你仍然可以访问到EditText。[/align]
[align=left]但是我不喜欢以这样的方式来实现,不管是代码复杂度的原因还是耦合的原因,总之我还是喜欢将自定义Dialog使用单独的类来创建。这样的话,在Dialog中你就访问不到Activity的EditText了,除非你将EditText的设为public(这当然不是一个好方法)。 网上查了下,发现可以通过回调函数来实现,仍然使用上一篇文章当中用到的自定义对话框作为例子,具体步骤如下:[/align]
[align=left]1.新建一个接口作为Dialog的监听器,并在接口中声明回调函数:[/align]
/** * 自定义Dialog监听器 * @author Kael.Chen * */ public interface PriorityListener { /** * 回调函数,用于在Dialog的监听事件触发后刷新Activity的UI显示 */ public void refreshPriorityUI(); }
2、为自定义Dialog增加带监听器参数的构造函数:
private PriorityListener listener; public PriorityDlg(Context context) { super(context); this.context = context; // TODO Auto-generated constructor stub } public PriorityDlg(Context context, int theme) { super(context, theme); this.context = context; } public PriorityDlg(Context context, int theme, PriorityListener listener) { this(context, theme); this.listener = listener; }
3、在Dialog中需要的地方去调用回调函数,比如在ListView的选择事件触发时:
dlg_priority_lvw.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { dismiss(); listener.refreshPriorityUI(); } });
4、然后你在Activity中使用带监听器参数的构造函数去实例化自定义Dialog,并实现监听器中声明的回调函数就可以了:
//为优先级选择按钮增加监听器 task_simple_form_priority.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //弹出任务优先级选择对话框 PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority, new PriorityDlg.PriorityListener() { @Override public void refreshPriorityUI() { //这里就是用来刷新Activity的UI显示的,如果你需要用到从Dialog传回的数据,你可以把该数据存储在全局变量中或者作为回调函数的参数传递进来 Toast.makeText(SimpleTaskActivity.this, "完成选择", Toast.LENGTH_SHORT).show(); } }); dlg.show(); } });
解析(创建自定义对话框):
PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority); return dlg;
R.style.dlg_priority设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 对话框样式 --> <style name="dlg_priority" parent="@android:Theme.Dialog"> <item name="android:windowNoTitle">true</item> </style> </resources>
相关文章推荐
- 在Dialog中更新Activity的数据显示
- Android Fragment、Activity、Dialog 各种组件直接数据共享,更新通知
- android之利用activity进行弹窗dialog显示版本更新
- activity如何显示来自于BroadcastReceiver的更新数据
- 主题为AppTheme.Light.Dialog的Activity拉取数据后,使用PullToRefreshListView显示不出来数据
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- 如何控制Activity和Dialog的显示透明度
- VC中用ADO和DataGrid控件显示和更新数据库中的数据
- 设置Activity的显示形式为Dialog
- 无刷新显示即时更新数据两例
- [转载]两个Form,一个Form中处理数据,另一个是ShowDialog()出来的上面就一个progressBar用来显示进度!!
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- AlertDialog之对话框的数据更新
- WPF DataGrid多线程更新数据显示
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- android 如何动态更新当前显示的Activity 的local
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- android activity生成的dialog的显示不了的问题
- android的activity或dialog位置大小动态显示