Android 抽象回调函数以及接口回调更新UI

回调函数使用,使得代码变得部分跟不变部分更加明显,代码整体上有一个质的提升。

我是用抽象类里写的抽象回调函数,通过通知注册接口形式,可以随时传递数据,接受数据。

同时我用接口函数回调更新UI。下面请看代码。

抽象类CallBackListenner.java

package com.example.recallbackdemo;

//回调抽象类CallBackListenner
public abstract class CallBackListenner {
	// 回调函数
	public abstract void CallBackTime(int ntime);

}
接口类OnTimeUpdateListInterface.java
package com.example.recallbackdemo;

//更新UI接口
public interface OnTimeUpdateListInterface {
	//抽象回调方法
     public abstract void UpdateUIInterface(int ntime);
}


时间管理类TimeManage.java

package com.example.recallbackdemo;

import android.os.Handler;

public class TimeManage {
	private int i = 0;
	private CallBackListenner mcallBackListenner = null;

	// 注册通知回调函数
	public void ReCallBackListenner(CallBackListenner callBackListenner) {
		mcallBackListenner = callBackListenner;
	}

	Handler handler = new Handler();
	// 将要执行的操作写在线程对象的run方法当中
	Runnable updateThread = new Runnable() {
		public void run() {
			// 停留1秒
			handler.postDelayed(updateThread, 1000);
			mcallBackListenner.CallBackTime(i);
			i++;
		}
	};

	// 开始计时
	public void StartTime() {
		if (i == 0) {
			handler.post(updateThread); // 启动线程
		}

	}

	// 结束计时
	public void EndTime() {
		handler.removeCallbacks(updateThread);
		i = 0;
		mcallBackListenner.CallBackTime(i);
	}

}


MainActivity

package com.example.recallbackdemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnTimeUpdateListInterface {

	private TimeManage mTimeManage = new TimeManage();;
	private int mntime = 0;
	private TextView mtvTime;
	private Handler mHandlerUI = new Handler() {
		public void handleMessage(Message msg) {
			Bundle dataBundle = msg.getData();
			if (dataBundle == null)
				return;
			mntime = dataBundle.getInt("time");
			if (mntime >= 0)
				mtvTime.setText(String.valueOf(mntime));
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mtvTime = (TextView) findViewById(R.id.tv_time);

		// 回调函数接受函数
		mTimeManage.ReCallBackListenner(new CallBackListenner() {
			@Override
			public void CallBackTime(int ntime) {
				mntime = ntime;
				UpdateUIInterface(mntime);
			}
		});
	}

	// 按键开始监听
	public void Start(View v) {
		if (mntime > 0) {
			Toast.makeText(getApplicationContext(), "已经开始计时....",
					Toast.LENGTH_LONG).show();
		} else {
			mTimeManage.StartTime();
		}
	}

	// 按键结束监听
	public void End(View v) {
		mTimeManage.EndTime();
	}

	// 实现接口类里的抽象函数,用来回调更新ui内容
	public void UpdateUIInterface(int ntime) {
		Message msg = new Message();
		Bundle dataBundle = new Bundle();
		dataBundle.putInt("time", ntime);
		msg.setData(dataBundle);
		mHandlerUI.sendMessage(msg);

	}
}

xml文件



    

        
    

    

        



这里还是用了线程实时更新UI。

demo还是前一章计时器,实现方法用了回调机制。

转载请注明出处:http://blog.csdn.net/qq_16064871

项目下载地址:http://download.csdn.net/detail/qq_16064871/8513331

你可能感兴趣的:(Android,移动开发,Android,常用开发技术)