package com.smartalk.gank.ui.fragment; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.view.View; import com.smartalk.gank.R; import com.smartalk.gank.model.entity.Gank; import com.smartalk.gank.presenter.BatteryFragmentPresenter; import com.smartalk.gank.ui.adapter.BatteryAdapter; import com.smartalk.gank.ui.base.BaseFragment; import com.smartalk.gank.ui.widget.LMRecyclerView; import com.smartalk.gank.utils.TipsUtil; import com.smartalk.gank.view.IBatteryView; import java.util.ArrayList; import java.util.List; import butterknife.Bind; public class BatteryFragment extends BaseFragment<BatteryFragmentPresenter> implements IBatteryView, LMRecyclerView.LoadMoreListener, SwipeRefreshLayout.OnRefreshListener { private static final String TYPE = "type"; private String type; private BatteryAdapter adapter; private List<Gank> gankList; private int page = 1; private boolean isRefresh = true; private boolean canLoading = true; @Bind(R.id.recycler_view) LMRecyclerView recyclerView; @Bind(R.id.swipe_refresh_layout) SwipeRefreshLayout swipeRefreshLayout; public BatteryFragment() { // Required empty public constructor } public static BatteryFragment newInstance(String type) { BatteryFragment fragment = new BatteryFragment(); Bundle args = new Bundle(); args.putString(TYPE, type); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { type = getArguments().getString(TYPE); } } @Override protected int provideViewLayoutId() { return R.layout.fragment_ganks; } @Override protected void initPresenter() { presenter = new BatteryFragmentPresenter(getContext(), this); presenter.init(); } @Override public void showProgressBar() { if (!swipeRefreshLayout.isRefreshing()) { swipeRefreshLayout.setRefreshing(true); } } @Override public void hideProgressBar() { if (swipeRefreshLayout.isRefreshing()) { swipeRefreshLayout.setRefreshing(false); } } @Override public void showErrorView() { canLoading = true; TipsUtil.showTipWithAction(recyclerView, getString(R.string.load_failed), getString(R.string.retry), new View.OnClickListener() { @Override public void onClick(View v) { presenter.loadGank(type, page); } }); } @Override public void showNoMoreData() { canLoading = false; TipsUtil.showSnackTip(recyclerView, getString(R.string.all_loaded)); } @Override public void showListView(List<Gank> gankList) { canLoading = true; page++; if (isRefresh) { this.gankList.clear(); this.gankList.addAll(gankList); adapter.notifyDataSetChanged(); isRefresh = false; } else { this.gankList.addAll(gankList); adapter.notifyDataSetChanged(); } } @Override public void init() { gankList = new ArrayList<>(); adapter = new BatteryAdapter(gankList, getContext()); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); recyclerView.setLoadMoreListener(this); swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary, R.color.colorAccent, R.color.blue); swipeRefreshLayout.setOnRefreshListener(this); swipeRefreshLayout.post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); presenter.loadGank(type, page); } }); } @Override public void loadMore() { if (canLoading) { presenter.loadGank(type, page); canLoading = false; } } @Override public void onRefresh() { isRefresh = true; page = 1; presenter.loadGank(type, page); } @Override public void onDestroyView() { super.onDestroyView(); presenter.release(); } }