Android回调的使用方式
16lz
2021-01-26
个人代码记录
转载请注明出处:http://blog.csdn.net/etong_123/article/details/17428571
用多了Android的OnClickListener,OnTouchListener 等回调方法,打算自己动手写一个。
C++实现回调的方式是用指针,java当然也有自己实现回调的方式。先定义接口
这里定义一个动作类
public interface MyAction {public void dosomething();}
定义实现类
这里用MyAction作为参数
public class Test {public void call(MyAction ma) {Log.i("etong", "befor doing");ma.dosomething();Log.i("etong", "after doing");}}
在MainActivity中实现
dosomething的方法由调用者来实现
public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Test test = new Test();test.call(new MyAction() {@Overridepublic void dosomething() {// TODO Auto-generated method stubLog.i("etong", "doing");}});}}
打印结果
只是个简单的例子,了解一下java回调的写法。
顺手写了个Android进度条更新,用了回调的写法。直接贴代码
接口 定义更新进度条抽象方法
public interface ProgressListener {public void onProgress(int index);}
实现类 通过线程累加进度条的参数
public class ProgressHandler {private ProgressListener progressListener;private int index = 0;public ProgressHandler() {}public void setProgress(ProgressListener p) {this.progressListener = p;}public void update() {// 用线程增加indexnew Thread() {@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();while (index < 100) {index++;//通知进度条更新进度progressListener.onProgress(index);try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}}.start();}}
Activity代码
public class TestActivity extends Activity {private ProgressBar progressBar;private ProgressHandler progressHandler;private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);progressBar = (ProgressBar) findViewById(R.id.progressBar1);progressHandler = new ProgressHandler();progressHandler.setProgress(new ProgressListener() {@Overridepublic void onProgress(int index) {// TODO Auto-generated method stubprogressBar.setProgress(index);}});btn = (Button) findViewById(R.id.button1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubprogressHandler.update();}});}}
Xml代码
通过回调的方式通知进度条更新。
更多相关文章
- Android(安卓)使用SWIG生成Jni代码
- Android(安卓)NDK学习(7)NDK测试时遇到的问题:C与C++互相调用
- Android自定义view绘制顺序及相关原理
- android studio 自用快捷键方案
- Android学习笔记--service部分
- WebView的使用,android与JS混编
- Building Custom Components/建立自定义组件
- Android(安卓)更新UI的两种方法——handler和runOnUiThread()
- 使用泛型方法在Java中安全地进行强制类型转换