android中必備的接口回調用法


1 ,這個方法很常見,本人覺得也很實用,分享下吧

public class DirverDistanceTool {
public void getDirverDistance(LatLng start, LatLng end,final OnDirverDistanceListener onDirverDistanceListener) {
RoutePlanSearch mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
private DrivingRouteLine route;

public void onGetWalkingRouteResult(WalkingRouteResult result) {}//獲取步行線路規划結果

public void onGetTransitRouteResult(TransitRouteResult result) {}//獲取公交換乘路徑規划結果

@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {}

public void onGetDrivingRouteResult(DrivingRouteResult result) {
if(result.error == SearchResult.ERRORNO.NO_ERROR && null != result && null != result.getRouteLines() && result.getRouteLines().size() > 0){
int distance = result.getRouteLines().get(0).getDistance();
BigDecimal bigDecimal = new BigDecimal(Double.valueOf(distance) / 1000);
if(null != onDirverDistanceListener)onDirverDistanceListener.dirverDistanceListener(bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
}else{
System.out.println("=============>抱歉,未計算出駕車距離...");
if(null != onDirverDistanceListener)onDirverDistanceListener.dirverDistanceListener(null);
}
}//獲取駕車線路規划結果

@Override
public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {}

@Override
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {}
});
mSearch.drivingSearch((new DrivingRoutePlanOption()).from(PlanNode.withLocation(start)).to(PlanNode.withLocation(end)));
}

public interface OnDirverDistanceListener{
void dirverDistanceListener(Double returnKm);
}
}

分析 :
這種方法是接口回調套接口回調,用來處理管理代碼,讓代碼更有層次感
RoutePlanSearch mSearch = RoutePlanSearch.newInstance(); 
                  中有 onGetWalkingRouteResult(); onGetTransitRouteResult();
                   onGetMassTransitRouteResult(); onGetDrivingRouteResult()
                  onGetIndoorRouteResult(); onGetBikingRouteResult();
                  有六個方法如果都放在一個類中會讓代碼很臃腫,通過接口回調可以很的解決這個問題了

寫了一個接口, 把 dirverDistanceListener ()拋到使用類中
public interface OnDirverDistanceListener{
void dirverDistanceListener(Double returnKm);
}

在使用的類中直接new,拿到了返回的 returnKm,
(new DirverDistanceTool()).getDirverDistance(start, end, new DirverDistanceTool.OnDirverDistanceListener() {
@Override
public void dirverDistanceListener(Double returnKm) {
if (null != deliveryPrice && null != returnKm && !TextUtils.isEmpty(minimun)) {
returnKM = returnKm;
price = deliveryPrice * returnKm * (isWeightHundred ? Integer.valueOf(minimun) : TextUtils.isEmpty(other_t.getText().toString()) ? 0 : Double.parseDouble(other_t.getText().toString().replace("噸", "")));
if (null != price)
delivery_price_text.setText((price > 0) ? "¥ " + DubString.keepPrecision(price + "", 2) : "0.00");
}//end of if
}
});
2.這個方法是基本用法
定義接口
  public interface CallBackGetAddress {
  public void editListener(int position);
  public void deleteListener(int position);
}
通過構造方法傳
private CallBackGetAddress callBack;
public AddressAdapter(Context context, CallBackGetAddress callBack) {
this.context = context;
this.callBack = callBack;
}
使用回調
vh.tvEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callBack.editListener(i);
}
});


在類中使用直接implements AddressAdapter.CallBackGetAddress
重寫
@Override
public void editListener(int position) {
BeanAdressList.Address address = list.get(position);
Bundle bundle = new Bundle();
bundle.putSerializable(AdressEditActivity.AdressDetail, address);
StephenToolUtils.startActivityNoFinish(activity, AdressEditActivity.class, bundle, Url.editAdress);
}


3.第三種實現方法,跟第二種差不多,是用activity實現的,比較簡單粗暴
申明方法
private final PublishActivity publishActivity;
public ExpadnableAdapter(PublishActivity publishActivity) {
this.publishActivity = publishActivity;
}


把方法回調過去
publishActivity.changeExpandableListShow(groupPosition, isExpanded);


在activity中使用
public void changeGroupPrice(int groupPosition, float price) {//設置父項是否編輯,是否有價格
purchase_type.get(groupPosition).setEditing(false);
purchase_type.get(groupPosition).setCurPrice(price);
}
4. 通過set 來回調
private OnRightClickListener onRightClickListener;

/**
* 右邊圖標點擊的回調
*/
public interface OnRightClickListener {
void onClick(EditText editText);
}

public void setOnRightClickListener(OnRightClickListener onRightClickListener) {
this.onRightClickListener = onRightClickListener;
}

很實用,個人項目中摘要
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM