Android回调的使用方式

来源:互联网 发布:设有一个二维数组a m n 编辑:程序博客网 时间:2024/06/05 15:07

个人代码记录 

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".TestActivity" >    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Start" />    <ProgressBar        android:id="@+id/progressBar1"        style="?android:attr/progressBarStyleHorizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

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







0 0