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传入接口实现类充当变量,在实现接口方法。

最新文章

  1. Java程序性能优化——让你的java程序更快、更稳定
  2. (1)as_view() (2)在urls.py里面出现的pk是怎么回事 (3)RetrieveAPIView表示什么
  3. Verilog语法基础讲解之参数化设计
  4. centos7扩展磁盘空间
  5. DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部
  6. Hadoop2.3+Hive0.12集群部署
  7. 需要知道的开源的框架-IOS
  8. mysql和mysqli的区别
  9. [模拟]P1202 [USACO1.1]黑色星期五Friday the Thirteenth
  10. windows 结束端口占用
  11. (转)ReentrantLock实现原理及源码分析
  12. Repeater取不到服务端控件
  13. 生成git,ssh的key
  14. 设置DataGridView不自动创建生成列
  15. 通过灰度线性映射增强图像对比度实现PS中的色阶
  16. Java基础(basis)-----关键字final和static的作用
  17. 涨姿势:Java 分业务、分级别实现自定义日志打印
  18. [Java in NetBeans] Lesson 10. For Loops
  19. SQL2008:WITH MOVE 子句可用于重新定位一个或多个文件
  20. spark优化之并行度

热门文章

  1. 2017/01/20 学习笔记 关于修改和重打jar包
  2. 怎么看时序图--nand flash的读操作详解 (转)
  3. 给html里面的class添加一个判断语句,判断当前class是否显示(vue)
  4. WTM
  5. 4056 hdu4866 Shooting
  6. 数据库之JDBC入门
  7. IOS开发:官方自带的JSON使用
  8. js中数组常用方法
  9. POJ 1061 青蛙的约会( 拓欧经典题 )
  10. 把SQLAlchemy查询对象转换成字典/json使用(汇总)