1.各种理解

<1>说白了,就是拿到对象引用,调其方法

<2>实际上就是利用多态的方式调用而已

<3>其实很容易理解的,定义接口,然后提供一个外部的接口设置进去,然后就注册事件,外部的就是真正做事情的地方,注册事件的一定是外部设置进去的接口类,上面代码中setListener必须在注册之前设置进去,不然就无法触发真正的实现

2.某给的代码示例

3.看下简单的接口回调在Android中应用。

左右各一个fragment,点击左侧的item,通过右侧的fragment请求操作,并返回数据到左侧fragment,显示在上角。

接口:

  1. public interface CallBack {
  2. void solve(String result);
  3. }

MainActivity布局

  1. <fragment
  2. android:id="@+id/list_fragment"
  3. android:layout_height="match_parent"
  4. android:layout_width="0dp"
  5. android:layout_weight="1"
  6. android:name="myapplication.com.mycallback.BlankFragment"
  7. />
  8. <fragment
  9. android:id="@+id/show_fragment"
  10. android:layout_height="match_parent"
  11. android:layout_width="0dp"
  12. android:layout_weight="2"
  13. android:name="myapplication.com.mycallback.Blank2Fragment"
  14. />

fragment2

  1. public class Blank2Fragment extends Fragment {
  2.  
  3. public Blank2Fragment() {
  4. // Required empty public constructor
  5. }
  6.  
  7. public void execute(CallBack callBack,String s){
  8.  
  9. String result="";
  10.  
  11. /**
  12. * 模拟耗时
  13. */
  14. for(int i=0; i<10000;i++){
  15.  
  16. }
  17.  
  18. if(s.equals("数据1")){
  19. result=s+s;
  20. }
  21. if(s.equals("数据2")){
  22. result=s+s;
  23. }
  24. if(s.equals("数据3")){
  25. result=s+s;
  26. }
  27. if(s.equals("数据4")){
  28. result=s+s;
  29. }
  30. if(s.equals("数据5")){
  31. result=s+s;
  32. }
  33.  
  34. callBack.solve(result);
  35. }
  36. @Override
  37. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  38. Bundle savedInstanceState) {
  39. // Inflate the layout for this fragment
  40. return inflater.inflate(R.layout.fragment_blank2, container, false);
  41. }
  42.  
  43. }

fragment1

  1. public class BlankFragment extends Fragment implements CallBack{
  2.  
  3. ListView listview;
  4. View view;
  5. TextView textView;
  6. Blank2Fragment blank2Fragment;
  7. public BlankFragment() {
  8. // Required empty public constructor
  9. blank2Fragment=new Blank2Fragment();
  10. }
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  13. Bundle savedInstanceState) {
  14. view=inflater.inflate(R.layout.fragment_blank, container, false);
  15. listview= (ListView) view.findViewById(R.id.listview);
  16. textView= (TextView) view.findViewById(R.id.textView);
  17. String str[]={"数据1","数据2","数据3","数据4","数据5"};
  18. ArrayAdapter<String> adapter=new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1,str);
  19. listview.setAdapter(adapter);
  20. listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  21. @Override
  22. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  23.  
  24. String s= (String) adapterView.getItemAtPosition(i);
  25. blank2Fragment.execute(BlankFragment.this,s);
  26. }
  27. });
  28. return view;
  29. }
  30. @Override
  31. public void solve(String result) {
  32. textView.setText(result);
  33. }
  34. }

 4.看看代码中的view的Onclick

  1. textView.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View view) {
  4.  
  5. }
  6. });

在看看setOnClickListener

  1. public void setOnClickListener(View.OnClickListener l) {
  2. throw new RuntimeException("Stub!");
  3. }
  1. public interface OnClickListener {
  2. void onClick(View var1);
  3. }

其代码大致如下:

  1. public class MyView {
  2.  
  3. public void setOnListener(OnClickListener onClickListener){
  4. onClickListener.onClick();
  5. }
  6.  
  7. public interface OnClickListener {
  8. void onClick();
  9. }
  10.  
  11. }
  1.         MyView myView=new MyView();
  2. myView.setOnListener(new MyView.OnClickListener() {
  3. @Override
  4. public void onClick() {
  5.  
  6. }
  7. });

5.自己的理解

把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被调用类实现的接口的方法。

这里既是把OnClickListener接口的实现类 new MyView.OnClickListener()赋值给该接口声明的接口变量。

就View的点击事件来看,声明接口OnClickListener ,通过setOnListener传入接口实现类充当变量,在实现接口方法。

Android接口回调的理解的更多相关文章

  1. Android接口回调机制

    开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A ...

  2. 弄明白Android 接口回调机制

    以前对于这个机制理解不够深刻,现在重新整理下思路. 一.建模 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机 ...

  3. 关于android接口回调机制

    http://www.cnblogs.com/JohnTsai/p/3975022.html http://www.zhihu.com/question/19801131 In my previous ...

  4. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  5. Android实战之 万能的接口回调

    转载请标明原地址:http://blog.csdn.net/gaolei1201/article/details/47084111 前言:本人也算是自学"成才",呵呵,大学时尽管学 ...

  6. Java学习之Java接口回调理解

    Java接口回调 在Java学习中有个比较重要的知识点,就是今天我们要讲的接口回调.接口回调的理解如果解释起来会比较抽象,我一般喜欢用一个或几个经典的例子来帮助加深理解. 举例:老板分派给员工做事,员 ...

  7. android 回调的理解(结合接口)

    什么是回调 回调其实是一种双向调用模式,也就是调用方在接口被调用时也会调用对方的接口.通俗的解释为:类A调用了类B中的方法1,然后类B最后又反过来调用类A中的方法2,即把结果返回给类A. 回调的具体实 ...

  8. Android开发之自定义组件和接口回调

    说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...

  9. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. switch 语句来选择要执行的多个代码块之一。

    switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case 1 和 case 2 不同时执行的代码 }

  2. DB2常用运维命令

    DB2是IBM公司推出关系型数据库管理系统.主要应用于银行.医院等大型机构.现今DB2主要包含以下三个系列:DB2 for Linux, UNIX and Windows(LUW) . DB2在Lin ...

  3. 理解Faster-RCNN 中的Anchor

    先上图看一下Faster R-CNN操作流程:  图片说明:Faster R-CNN=Fast R-CNN+RPN,其中Fast R-CNN结构不变:RPN负责生成proposals,配合最后一层的f ...

  4. Python数据分析-----数据分类

    1.常见的分类算法主要有: (1)KNN算法 (2)贝叶斯方法 (3)决策树 (4)人工神经网络 (5)支持向量机(SVM) 2.KNN算法 (1)KNN应用场景: 比方说样本中有很多零食.很多电器. ...

  5. 使用Flask_SQLAlchemy连接多个数据库

    #!/usr/bin/env python #-*- coding: utf-8 -*- from flask import Flask from flask_sqlalchemy import SQ ...

  6. Python编程:从入门到实践 - matplotlib篇 - plot & scatter

    matplotlib篇 plot & scatter # filename.py 获取当前文件名方法 import sys # 当前文件名 print(sys.argv[0]) # 去除后缀后 ...

  7. J2EE提高之知识清单

    Oracle数据库 JDBC事务 Spring事务 SOA XML/JSON redis/memcached 反射,类加载,JVM 工具类:UML, Maven, 性能类:CPU监控,memary监控 ...

  8. spring和struts整合

    整合准备:导入jar包 如果只是访问action,没有做数据库方面的操作的话 只需要导入下面的jar spring相关jar 以及struts相关jar包 整合过程: 用到了struts所以需要在we ...

  9. auto-boxing, uboxing,以及缓存问题

    package chengbaoDemo; public class Test02 {    public static void main(String[] args) {        Integ ...

  10. [SharePoint2010开发入门经典]编译部署SPS WebPart

    本章概要: 1.理解web部件,什么时候需要创建一个 2.理解标准和可视web部件的不同 3.使用VS构建部署web部件