【问题】
Android,即Java,中,需要一个函数中的某个参数是个函数,以此希望函数的回调。
即,实现类似于函数指针的效果。
【解决过程】
1. 参考:
Java Tip 10: Implement callback routines in Java
但是觉得太复杂了,不应该这么麻烦的。
2. 再参考:
How to Define Callbacks in Android?
看似很不错。
最后终于自己写了对应的代码。
【总结】
在调用者中:
1.实现对应的函数,执行对应的功能
2.把该函数,作为一个变量一样,传递给,对应的被调用的类的那个属性(变量)
import crifan.com.crifanLib; /** Called when the user clicks the Download button */ public void preformDownload(View view) { /* just like define a variable, implement that callback function, then assign to the class's attribute */ crifanLib.UpdateProgressCallback updateProgressCallback = new crifanLib.UpdateProgressCallback() { public void updateProgress(long currentSize, long totalSize){ /* do what you want to do here */ } }; songtaste.stDownloadFromUrl(strSongUrl, fullFilename, updateProgressCallback); }
在被调用的类中:
1.定义对应的interface(供调用者实现对应的接口函数)
2.在被调用函数中,把该接口参数,直接当做函数,来使用
package crifan.com; public class crifanLib { // define a interface public interface UpdateProgressCallback { // This is just a regular method so it can return something or // take arguments if you like. public void updateProgress(long currentSize, long totalSize); } public Boolean downlodFile(String url, File fullFilename, HttpParams headerParams, UpdateProgressCallback updateProgressCallbak) { //... // call this function as normal updateProgressCallbak.updateProgress(downloadedSize, totalSize); //... } }
相对来说,还是不是那么复杂的。。。