android回调机制的理解。第一次写技术博客。
从View源码中的onclick事件入手:
1)系统声明接口,定义接口中的抽象方法。
//这个是View的一个回调接口
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
2.我们人为new 接口对象,重写点击方法
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
@Override
public void onClick(View v) {
Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show();
}
3)系统类 声明OnclickListener接口对象mOnclickListener,我们刚刚new的接口对象赋值到mOnclickListner,mOnclickListner调用我们重写的onClick方法
/**
*
*/
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
/**
* Listener used to dispatch click events.
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
protected OnClickListener mOnClickListener;
/**
*
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = l;
}
/**
* Call this view's OnClickListener, if it is defined.
*
* @return True there was an assigned OnClickListener that was called, false
* otherwise is returned.
*/
public boolean performClick() {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
if (mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
mOnClickListener.onClick(this);
return true;
}
return false;
}
}
接口回调机制应用场景:
AsyncHttpClient是异步的,但是有时候我们需要得到请求的结果集来返回给某个函数,由于是异步的,所以不能够直接return会去,所以可以定义一个interface来给调用AsyncHttpClient方法的一个回调来获取结果集,代码如下:
1)定义接口和接口方法,以及接口对象
private static Callback mCallback;
public interface Callback{
abstract void rankingsResultData(JSONArray result,int code);
abstract void postResultData(int result);
abstract void shareResultData(int result);
}
2)当post请求返回结果后,
public static void getRankingList(int integType,int sortType,int size) {
mClient.post(GET_RANKINGList, getRankingsParms(integType,sortType,size), new JsonHttpResponseHandler(){
@Override
public void onSuccess(JSONObject response) {
if (response != null) {
try {
JSONObject status = response.getJSONObject("state");
int code = status.getInt("code");
JSONArray list = null;
if (code == 0) {
list = response.getJSONArray("items");
}
if(mCallback != null){
mCallback.rankingsResultData(list,code);
}
} catch (JSONException e) {
e.printStackTrace();
if(mCallback != null){
mCallback.rankingsResultData(null,2);
}
}
}
}
public void onFailure(Throwable e, JSONObject errorResponse) {
if(mCallback != null){
mCallback.rankingsResultData(null,-1);
}
}
public void onFailure(Throwable error, String content) {
if(mCallback != null){
mCallback.rankingsResultData(null,-1);
}
}
});
}
从View源码中的onclick事件入手:
1)系统声明接口,定义接口中的抽象方法。
//这个是View的一个回调接口
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
2.我们人为new 接口对象,重写点击方法
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
@Override
public void onClick(View v) {
Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show();
}
3)系统类 声明OnclickListener接口对象mOnclickListener,我们刚刚new的接口对象赋值到mOnclickListner,mOnclickListner调用我们重写的onClick方法
/**
*
*/
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
/**
* Listener used to dispatch click events.
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
protected OnClickListener mOnClickListener;
/**
*
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = l;
}
/**
* Call this view's OnClickListener, if it is defined.
*
* @return True there was an assigned OnClickListener that was called, false
* otherwise is returned.
*/
public boolean performClick() {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
if (mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
mOnClickListener.onClick(this);
return true;
}
return false;
}
}
接口回调机制应用场景:
AsyncHttpClient是异步的,但是有时候我们需要得到请求的结果集来返回给某个函数,由于是异步的,所以不能够直接return会去,所以可以定义一个interface来给调用AsyncHttpClient方法的一个回调来获取结果集,代码如下:
1)定义接口和接口方法,以及接口对象
private static Callback mCallback;
public interface Callback{
abstract void rankingsResultData(JSONArray result,int code);
abstract void postResultData(int result);
abstract void shareResultData(int result);
}
2)当post请求返回结果后,
public static void getRankingList(int integType,int sortType,int size) {
mClient.post(GET_RANKINGList, getRankingsParms(integType,sortType,size), new JsonHttpResponseHandler(){
@Override
public void onSuccess(JSONObject response) {
if (response != null) {
try {
JSONObject status = response.getJSONObject("state");
int code = status.getInt("code");
JSONArray list = null;
if (code == 0) {
list = response.getJSONArray("items");
}
if(mCallback != null){
mCallback.rankingsResultData(list,code);
}
} catch (JSONException e) {
e.printStackTrace();
if(mCallback != null){
mCallback.rankingsResultData(null,2);
}
}
}
}
public void onFailure(Throwable e, JSONObject errorResponse) {
if(mCallback != null){
mCallback.rankingsResultData(null,-1);
}
}
public void onFailure(Throwable error, String content) {
if(mCallback != null){
mCallback.rankingsResultData(null,-1);
}
}
});
}