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开发:自定义界面的Dialog,并且实现按钮的监听回调

该项目适合想实现自定义dialog,有懒得折腾的人。 在安卓开发的时候,往往会碰到一些特别漂亮的dialog,比如这个图片的: 很多这种类型的dialog,界面千变万化,于是我建立了一个通用自...
  • weidongjian
  • weidongjian
  • 2014年12月09日 11:10
  • 2910

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

public class MessageDialog { Context context; AlertDialog dialog; AlertDialog.Builder bu...
  • rongbinjava
  • rongbinjava
  • 2016年07月07日 15:01
  • 1551

Android 通过自定义Dialog来理解接口回调callback

  • 2016年08月25日 22:13
  • 30.76MB
  • 下载

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

摘自:http://www.2cto.com/kf/201107/97327.html 这个例子只是简单的返回一个String,而在实际需要时,可能需要在DIalog或非Activi...
  • aiguoguo000
  • aiguoguo000
  • 2016年05月26日 14:31
  • 2325

Dialog自定义对话框加载网络数据

  • 2015年06月18日 18:06
  • 1.53MB
  • 下载

自定义dialog中组件的获取

问题描述:今天在做弹出对话框的功能时,想获取对话框中组件的text并在主窗口显示,结果运行以后报nullpointer...
  • blwinner
  • blwinner
  • 2016年01月12日 16:23
  • 1070

自定义提示加载数据Dialog的实现

在数据请求的时候,为了给用户直观的显示正在请求数据,而不是类似无响应那种,我们通常会在开始网络请求中调用progressBar展示,用于表明我正在努力加载,项目中的用法也是类似的。先看下效果图: ...
  • gxq20101966
  • gxq20101966
  • 2016年06月27日 17:02
  • 1326

Dialog如何实现显示自定义内容

log.xml     android:layout_width="match_parent"     android:layout_height="match_parent"   ...
  • yinbucheng
  • yinbucheng
  • 2016年05月15日 15:32
  • 260

Android自定义AlertDialog的控件获取操作

Android自定义AlertDialog的控件获取操作在自定义的AlertDialog布局虽然可以显示,但是试过很多方法都不能获得其中的控件进行操作,找了很多方法最后这种方法可以.dialog的布局...
  • u012794461
  • u012794461
  • 2015年08月24日 10:42
  • 1376

Android自定义Dialog弹窗获取Dialog中的控件ID

今天在开发的过程中,对于自定义的Dialog进行一个研究的探讨,然后终于弄出一些心得,赶紧记录下来。 自定义Dialog的思路,总的来说就是定义一个dialog的xml,然后对这个xml的控件进行封装...
  • qq_21139343
  • qq_21139343
  • 2016年07月14日 19:46
  • 1064
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 回调接口学习(自定义Dialog 获取数据数据回调)
举报原因:
原因补充:

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