Lola&France

today lazy,tomorrow die;

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

功能:

将单独的一个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);
                        }
                    });
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011644423/article/details/49936535
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭