在Dialog中更新Activity的数据显示

标题说的不是很清楚,假设有一个activity,activity中有一个Button和一个TextView,点击按钮,弹出Dialog,对话框中有一个ListView,选中ListView中的某一项,关闭对话框,更新activity中EditText的值为你选中项的值。

分析这个问题,假设Dialog为AlertDialog,你可以直接在Button的OnClickListener事件中创建Dialog,并在AlertDialog的setPositiveButton或其他按钮监听器中完成对EditText值的更新;如果Dialog为自定义Dialog,你也完全可以将这个自定义Dialog以Activity内部类的方式实现,这样在Dialog中ListView的选择事件监听器中你仍然可以访问到EditText。

但是我不喜欢以这样的方式来实现,不管是代码复杂度的原因还是耦合的原因,总之我还是喜欢将自定义Dialog使用单独的类来创建。这样的话,在Dialog中你就访问不到Activity的EditText了,除非你将EditText的设为public(这当然不是一个好方法)。 网上查了下,发现可以通过回调函数来实现,仍然使用上一篇文章当中用到的自定义对话框作为例子,具体步骤如下:

1、新建一个接口作为Dialog的监听器,并在接口中声明回调函数:

/** * 自定义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();
            
            }
        });

转载于:https://my.oschina.net/zhangjie830621/blog/103054

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值