android 回调接口学习(自定义Dialog 获取数据数据回调)

来源:互联网 发布:工业设计手绘工具知乎 编辑:程序博客网 时间:2024/05/16 09:41

功能:

将单独的一个Dialog提取出来以复用代码,然后在activity中去new 一个Dialog出来,能够获取Dialog选取的数据;

具体实现

TopicSingleChoiceDialog.java

 private int topicID=-1;//真正要获取的数据

自定义内部类接口

 public interface OnTestListening{         void getTopicID(int topicID);    }

内部变量

 private OnTestListening onTestListening;

类实现点击按钮监听器(就是我们点击了该按钮后,activity将回调 获取数据)

public class TopicSingleChoiceDialog extends AlertDialog.Builder implements DialogInterface.OnClickListener {

具体怎么做呢,
让该按钮先绑定该监听器

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

监听器具体实现

  @Override    public void onClick(DialogInterface dialogInterface, int i) {        onTestListening.getTopicID(topicID);    }

即等价于

this.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                onTestListening.getTopicID(topicID);            }        });

但是由于onTestListening在内部类,onTestListening要final,而interface的onTestListening是不能被final的(貌似是这样),最后采用上面的方法 让TopicSingleChoiceDialog 去实现接口

那么到这里后,当点击确定按钮后,就会执行 onTestListening.getTopicID(topicID);
那么 我们只要在activity中实例化dialog(Context cx,new TopicSingleChoiceDialog.OnTestListening())
例如:

TopicSingleChoiceDialog topicSingleleChoiceDialog =new TopicSingleChoiceDialog(ct, new TopicSingleChoiceDialog.OnTestListening() {                        @Override                        public void getTopicID(int topicID) {                            Log.i("zjx","topicID:"+topicID);                        }                    });

便可以获取到我们要的topicID

当然 对于复杂数据 ,只要将getTopicID中的参数改为Bundle 或者map等即可
完整代码:

package com.france.sharereader.ui.view;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.widget.Toast;/** * Created by Administrator on 2015/11/15. */public class TopicSingleChoiceDialog extends AlertDialog.Builder implements DialogInterface.OnClickListener {    private int topicID=-1;//真正要获取的数据    private OnTestListening onTestListening;    public TopicSingleChoiceDialog(Context context,OnTestListening onTestListening) {        super(context);        this.onTestListening=onTestListening;        this.setTitle("选择所属话题");        final String[] hobbies = {"编译原理", "软件工程", "数据挖掘", "电子设计"};        //    设置一个单项选择下拉框        /**         * 第一个参数指定我们要显示的一组下拉多选框的数据集合         * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,         * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};         * 第三个参数给每一个多选项绑定一个监听器         */        this.setSingleChoiceItems(hobbies, 0, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                setTopicID(which);            }        });        this.setPositiveButton("确定", this);        this.setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {            }        });        this.show();    }    public interface OnTestListening{         void getTopicID(int topicID);    }    public void setTopicID(int topicID) {        this.topicID = topicID;    }    @Override    public void onClick(DialogInterface dialogInterface, int i) {        onTestListening.getTopicID(topicID);    }}

activity中:

TopicSingleChoiceDialog topicSingleleChoiceDialog =new TopicSingleChoiceDialog(ct, new TopicSingleChoiceDialog.OnTestListening() {                        @Override                        public void getTopicID(int topicID) {                            Log.i("zjx","topicID:"+topicID);                        }                    });
0 0
原创粉丝点击