package com.liyu.fakeweather.ui.bus; import android.support.design.widget.Snackbar; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import com.baidu.location.BDLocation; import com.liyu.fakeweather.R; import com.liyu.fakeweather.http.ApiFactory; import com.liyu.fakeweather.http.BaseBusResponse; import com.liyu.fakeweather.location.RxLocation; import com.liyu.fakeweather.model.BusLineNearby; import com.liyu.fakeweather.ui.base.BaseContentFragment; import com.liyu.fakeweather.ui.bus.adapter.StationNearbyAdapter; import java.util.HashMap; import java.util.Map; import rx.Observable; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by liyu on 2016/10/31. */ public class NearbyStationFragment extends BaseContentFragment { private RecyclerView recyclerView; private StationNearbyAdapter adapter; private Subscription subscription; @Override protected int getLayoutId() { return R.layout.fragment_station_nearby; } @Override protected void initViews() { super.initViews(); recyclerView = findView(R.id.rv_line_search); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new StationNearbyAdapter(R.layout.item_bus_line_nearby, null); adapter.openLoadAnimation(); recyclerView.setAdapter(adapter); } @Override protected void lazyFetchData() { refreshLayout.setRefreshing(true); subscription = RxLocation.get().locate(getActivity()) .flatMap(new Func1<BDLocation, Observable<BaseBusResponse<BusLineNearby>>>() { @Override public Observable<BaseBusResponse<BusLineNearby>> call(BDLocation bdLocation) { Map<String, String> options = new HashMap<>(); options.put("lat", String.valueOf(bdLocation.getLatitude())); options.put("lng", String.valueOf(bdLocation.getLongitude())); options.put("more", "1"); return ApiFactory.getBusController().getVicinity(options).subscribeOn(Schedulers.io()); } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<BaseBusResponse<BusLineNearby>>() { @Override public void onCompleted() { refreshLayout.setRefreshing(false); } @Override public void onError(Throwable e) { refreshLayout.setRefreshing(false); Snackbar.make(getView(), "获取站点信息失败!", Snackbar.LENGTH_INDEFINITE).setAction("重试", new View.OnClickListener() { @Override public void onClick(View view) { lazyFetchData(); } }).setActionTextColor(getActivity().getResources().getColor(R.color.actionColor)).show(); } @Override public void onNext(BaseBusResponse<BusLineNearby> response) { if (response.data.getStation() == null || response.data.getStation().size() == 0) { Snackbar.make(getView(), "方圆一公里没有公交 -_- !", Snackbar.LENGTH_INDEFINITE) .setAction("哎", new View.OnClickListener() { @Override public void onClick(View view) { } }) .setActionTextColor(getActivity().getResources().getColor(R.color.actionColor)) .show(); return; } adapter.setNewData(response.data.getStation()); } }); } @Override public void onDestroy() { super.onDestroy(); if (subscription != null && !subscription.isUnsubscribed()) subscription.unsubscribe(); } }