package com.liyu.fakeweather.ui.bus; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import com.liyu.fakeweather.R; import com.liyu.fakeweather.event.BusFavoritesEvent; import com.liyu.fakeweather.model.BusLineDetail; import com.liyu.fakeweather.model.FavoritesBusBean; import com.liyu.fakeweather.ui.base.BaseContentFragment; import com.liyu.fakeweather.ui.bus.adapter.FavoritesAdapter; import com.liyu.fakeweather.utils.RxDataBase; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; /** * Created by liyu on 2016/11/16. */ public class FavoritesFragment extends BaseContentFragment { private RecyclerView recyclerView; private FavoritesAdapter adapter; @Override protected int getLayoutId() { return R.layout.fragment_bus_favorites; } @Override protected void initViews() { super.initViews(); recyclerView = findView(R.id.rv_favorites); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new FavoritesAdapter(R.layout.item_bus_favorites, null); adapter.openLoadAnimation(); recyclerView.setAdapter(adapter); } @Override protected void lazyFetchData() { showRefreshing(true); RxDataBase.getAll(BusLineDetail.class, "isFavorite = ?", "1").map(new Func1<List<BusLineDetail>, List<FavoritesBusBean>>() { @Override public List<FavoritesBusBean> call(List<BusLineDetail> lines) { if (lines == null || lines.size() == 0) { return null; } List<FavoritesBusBean> favList = new ArrayList<>(); for (BusLineDetail line : lines) { favList.add(new FavoritesBusBean(line)); } return favList; } }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<FavoritesBusBean>>() { @Override public void onCompleted() { showRefreshing(false); } @Override public void onError(Throwable e) { showRefreshing(false); } @Override public void onNext(List<FavoritesBusBean> favList) { adapter.setNewData(favList); } }); } @Subscribe(threadMode = ThreadMode.MAIN) public void onFavoritesChanged(BusFavoritesEvent event) { int positon = adapter.getData().indexOf(event.getFavorite()); if (positon >= 0) { if (!event.isFavorite()) { adapter.remove(positon); } } else { if (event.isFavorite()) { adapter.addData(event.getFavorite()); } } } @Override public void onStart() { super.onStart(); if (!EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().register(this); } } @Override public void onDestroy() { if (EventBus.getDefault().isRegistered(this)) EventBus.getDefault().unregister(this); super.onDestroy(); } }