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

原创 2015年11月20日 00:04:14

功能:

将单独的一个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);
                        }
                    });
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android接口回调传递数据

一 、回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直...

Android中接口回调、方法回调

Android中方法的的回调就是把方法的定义和功能导入实现分开的一种机制,目的是为了解耦,现在来举个例子看看它的应用场合,例如在activity中的listview与adapter类之间的传递: 一、...

Android弹出窗口点击确定返回事件

用AlertDialog的方法,点击确定窗口消失,返回dangq

Android Activity调用Dialog后的返回值方法

摘自:http://www.2cto.com/kf/201107/97327.html 这个例子只是简单的返回一个String,而在实际需要时,可能需要在DIalog或非Activi...

handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新

没事,就简单来写个关于自定义对话框使用HANDLER与TIMERTASK来定时更新其自定义的对话框的数据,由于自定义的对话框是为继承DAILOG来单独实现的,所以在数据更新时会稍微麻烦一点,所以现在我...

Dialog中获得用户填写的数据

创建一个View对象,由View提供输入的控件和布局(一般我们通过LayoutInflater将xml布局文件转换成View对象) 创建一个Builder对象 将第一步创建的View对象设置到Buil...
  • adb_avd
  • adb_avd
  • 2011年07月20日 01:21
  • 729

一个自定义dialog提供确定和取消按钮的回调接口

public class MessageDialog { Context context; AlertDialog dialog; AlertDialog.Builder bu...

自定义Dialog接口回调参数

基本上所有的app项目都会有自定义dialog,但有时如果把dialog单独写成一个类,我们就需要考虑到如何将dialog的参数回调到activity或者fragment,当然有很多方法,这里主要讲的...

Android java回调机制与自定义接口回调方法

Android java回调机制与自定义接口回调方法 发表于 2015-04-15   |   分类于 Android学习   |   摘自:http://baibig.me/20...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 回调接口学习(自定义Dialog 获取数据数据回调)
举报原因:
原因补充:

(最多只允许输入30个字)