Android之浅析回调

来源:互联网 发布:百度网盘搜索源码 编辑:程序博客网 时间:2024/06/06 02:24

      初次用到回调是在Fragment和Activity之间进行通信的时候,当时感觉很难理解,但又觉得这个方法使用起来很方便,所以对它进行仔细的研究。发现回调不仅仅是实现功能那么简单,它还可以把几个相似的功能用简单的几句代码来实现。所以在编程中使用回调可增加码农们的效率。

我自己总结出了回调的大致四个步骤:

1.在需要调用的文件里写一个接口和一个接口方法。注意,这里的权限都是公共的。

2.在被调用的文件里实现这个接口和这个接口的方法。在这个方法里写我们的需求,也就是所需要的功能。

3.在需要调用的文件里写静态方法和一个接口类型的静态变量,在方法里使被调用的文件转化为此接口类型的变量。

4.在被调用的文件里调用第3步的静态方法,使两文件关联起来。

5.调用接口方法(静态变量.接口方法)。

简而言之:回调就是使用实现接口的接口方法来操作本类文件。

下面这是一个简单的示例:

我们需要在A画面实现文本框文字的改变,所以我们可以在另一个B画面里创建接口,操作A画面的文本文字。

A画面:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">public class CallBack_AActivity extends AppCompatActivity  
  2.      implements CallBack_BActivity.callBack{  
  3.     private TextView tv;  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_call_back__a);  
  8.   
  9.         CallBack_BActivity.setCallBack(this);  
  10.   
  11.         tv = (TextView) findViewById(R.id.tv);  
  12.         tv.setClickable(true);  
  13.         tv.setOnClickListener(new View.OnClickListener() {  
  14.             @Override  
  15.             public void onClick(View view) {  
  16.                 Intent intent = new Intent(getBaseContext(),CallBack_BActivity.class);  
  17.                 startActivity(intent);  
  18.             }  
  19.         });  
  20.     }  
  21.   
  22.     @Override  
  23.     public void changeText(String result) {  
  24.         tv.setText(result);  
  25.     }  
  26.   
  27. }</span>  

B画面:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class CallBack_BActivity extends AppCompatActivity {  
  2.     private static callBack back;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_call_back__b);  
  7.     }  
  8.     public void click(View view){  
  9.         back.changeText("这是一个回调");  
  10.         finish();  
  11.     }  
  12.     public interface callBack{  
  13.         public void changeText(String result);  
  14.     }  
  15.     public static void setCallBack(Context context){  
  16.         back = (callBack) context;  
  17.     }  
  18. }  
  19. /* 
  20. * 1.在本界面定义接口 
  21. * 2.在另一个界面实现此接口 
  22. * 3.本界面实现方法 
  23. * 4.另一个界面关联。 
  24. * */  

截图:

1.第一次进入A画面:


2.点击文本框进入B画面


3.点击按钮返回A画面



1 1
原创粉丝点击