1.各种理解

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

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

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

2.某给的代码示例

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

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

接口:

public interface CallBack {
void solve(String result);
}

MainActivity布局

<fragment
android:id="@+id/list_fragment"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:name="myapplication.com.mycallback.BlankFragment"
/>
<fragment
android:id="@+id/show_fragment"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:name="myapplication.com.mycallback.Blank2Fragment"
/>

fragment2

public class Blank2Fragment extends Fragment {

    public Blank2Fragment() {
// Required empty public constructor
} public void execute(CallBack callBack,String s){ String result=""; /**
* 模拟耗时
*/
for(int i=0; i<10000;i++){ } if(s.equals("数据1")){
result=s+s;
}
if(s.equals("数据2")){
result=s+s;
}
if(s.equals("数据3")){
result=s+s;
}
if(s.equals("数据4")){
result=s+s;
}
if(s.equals("数据5")){
result=s+s;
} callBack.solve(result);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank2, container, false);
} }

fragment1

public class BlankFragment extends Fragment  implements CallBack{

    ListView listview;
View view;
TextView textView;
Blank2Fragment blank2Fragment;
public BlankFragment() {
// Required empty public constructor
blank2Fragment=new Blank2Fragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_blank, container, false);
listview= (ListView) view.findViewById(R.id.listview);
textView= (TextView) view.findViewById(R.id.textView);
String str[]={"数据1","数据2","数据3","数据4","数据5"};
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1,str);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String s= (String) adapterView.getItemAtPosition(i);
blank2Fragment.execute(BlankFragment.this,s);
}
});
return view;
}
@Override
public void solve(String result) {
textView.setText(result);
}
}

 4.看看代码中的view的Onclick

 textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { }
});

在看看setOnClickListener

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

其代码大致如下:

public class MyView {

    public void setOnListener(OnClickListener onClickListener){
onClickListener.onClick();
} public interface OnClickListener {
void onClick();
} }
           MyView myView=new MyView();
myView.setOnListener(new MyView.OnClickListener() {
@Override
public void onClick() { }
});

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. 6 Python+Selenium的元素定位方法(CSS)

    [环境] python3.6+selenium3.0.2+Firefox50.0+win7 [定位方法] 1.方法:find_element_by_css_selector('xx') CSS的语法比 ...

  2. WebLogic安装使用及常见问题

    WebLogic的下载与安装 下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html fmw_ ...

  3. Laravel的路由功能

    只能在当前方法内加载视图和URL跳转!

  4. P1085 不高兴的津津

    ... 题目描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一天上课超过八个小时就会不 ...

  5. [bzoj2662 BeiJing wc2012] 冻结 (分层图+最短路)

    传送门 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中„„&q ...

  6. docker 私有仓库的两种方式

    1.使用官方默认的registry镜像构建本地仓库 这种方式适用于小规模的镜像仓库储存,没有Ui界面 (1)docker pull registry (2)docker run -d -p 5000: ...

  7. selenium+java启动chrome浏览器

  8. 线程锁的机制Lock

    java.util.concurrent.locks 接口Lock publci interface Lock Lock 实现提供了比使用synchronized方法和语句可获得的更加广泛的锁定操作, ...

  9. 【Web API系列教程】3.4 — 实战:处理数据(处理实体关系)

    前言 本部分描写叙述了EF怎样载入相关实体的细节,而且怎样在你的模型类中处理环形导航属性.(本部分预备了背景知识,而这不是完毕这个教程所必须的.你也能够跳到第五节) 预载入和延迟载入 预载入和延迟载入 ...

  10. spring cloud 中Actuator不显示更多信息的处理方式

    spring cloud 中Actuator不显示更多信息的处理方式 直接咨询了周大立,他说 management.security.enabled = false 就可以了: 学习了:http:// ...