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;
}
很實用,個人項目中摘要