个人代码记录 

转载请注明出处: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代码

    

通过回调的方式通知进度条更新。







更多相关文章

  1. Android(安卓)使用SWIG生成Jni代码
  2. Android(安卓)NDK学习(7)NDK测试时遇到的问题:C与C++互相调用
  3. Android自定义view绘制顺序及相关原理
  4. android studio 自用快捷键方案
  5. Android学习笔记--service部分
  6. WebView的使用,android与JS混编
  7. Building Custom Components/建立自定义组件
  8. Android(安卓)更新UI的两种方法——handler和runOnUiThread()
  9. 使用泛型方法在Java中安全地进行强制类型转换

随机推荐

  1. Android异步处理四:AsyncTask的实现原理
  2. android ListView嵌套checkbox并取代chec
  3. Android重要控件概览(上)
  4. Android子控件超出父控件方法
  5. android 5.0 默认水波纹背景属性,可设置
  6. Android(安卓)DrawerLayout 侧边栏使用之
  7. Android(安卓)android:launchMode=“sing
  8. 取消自动获取焦点(默认进来焦点到edittex
  9. Android(安卓)底部导航栏中间凸起、越界
  10. CheckBox组件的熟悉