package com.ittianyu.pocenter.features.find; import android.content.Intent; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemClickListener; import com.ittianyu.pocenter.R; import com.ittianyu.pocenter.common.base.BaseFragment; import com.ittianyu.pocenter.common.bean.ProjectBean; import com.ittianyu.pocenter.common.utils.CollectionUtils; import com.ittianyu.pocenter.databinding.FragFindBinding; import com.ittianyu.pocenter.features.detail.DetailActivity; import com.ittianyu.pocenter.features.search.SearchActivity; import com.orhanobut.logger.Logger; import java.util.ArrayList; import java.util.List; /** * Created by yu on 2017/1/13. */ public class FindFragment extends BaseFragment<SwipeRefreshLayout, List<ProjectBean>, FindContract.View, FindContract.Presenter> implements FindContract.View { private FragFindBinding bind; private FindAdapter findAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // Logger.d("onCreateView"); return View.inflate(getContext(), R.layout.frag_find, null); } @Override public FindContract.Presenter createPresenter() { return new FindPresenter(); } @Override protected void initView(View view) { bind = DataBindingUtil.bind(view); // init recycler view findAdapter = new FindAdapter(new ArrayList<ProjectBean>(0)); bind.rv.setAdapter(findAdapter); bind.rv.setLayoutManager(new LinearLayoutManager(getContext())); DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL); dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.shape_drive_line)); bind.rv.addItemDecoration(dividerItemDecoration); initEvent(); } /** * set listeners */ private void initEvent() { // refresh listener bind.vContent.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { loadData(true); } }); // load more listener findAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { bind.rv.post(new Runnable() { @Override public void run() { loadMore(); } }); } }); // set listener to start search bind.tb.findViewById(R.id.ll_root).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(getContext(), SearchActivity.class)); } }); // item click listener bind.rv.addOnItemTouchListener(new OnItemClickListener() { @Override public void SimpleOnItemClick(BaseQuickAdapter baseQuickAdapter, View view, int i) { // get item url ProjectBean project = (ProjectBean) baseQuickAdapter.getItem(i); // start detail activity Intent intent = new Intent(getContext(), DetailActivity.class); intent.putExtra(DetailActivity.EXTRA_URL, project.url); intent.putExtra(DetailActivity.EXTRA_TITLE, project.title); intent.putExtra(DetailActivity.EXTRA_DESCRIPTION, project.description); startActivity(intent); } }); } @Override public void loadData(boolean pullToRefresh) { // disable load more when reload data or first load findAdapter.setEnableLoadMore(false); // show loading showLoading(pullToRefresh); presenter.loadData(pullToRefresh); Logger.d("start load data"); } @Override public void setData(List<ProjectBean> data) { if (CollectionUtils.isEmpty(data)) { showEmpty(); } else { showContent(); } findAdapter.setNewData(data); Logger.d("set data"); loadDataComplete(); } @Override public void loadDataError(Throwable e, boolean pullToRefresh) { showError(e, pullToRefresh); Logger.d("load data error"); loadDataComplete(); } @Override public void loadDataComplete() { // enable load more after reload completed findAdapter.setEnableLoadMore(true); bind.vContent.setRefreshing(false); Logger.d("load data complete"); } @Override public void loadMore() { // disable refresh when load more bind.vContent.setEnabled(false); presenter.loadMore(findAdapter.getData().size()); Logger.d("start load more"); } @Override public void addData(List<ProjectBean> data) { if (CollectionUtils.isEmpty(data)) { // no more data findAdapter.loadMoreEnd(); } else { findAdapter.loadMoreComplete(); } findAdapter.addData(data); Logger.d("add data"); loadMoreComplete(); } @Override public void loadMoreError(Throwable e) { // showError(e, false); findAdapter.loadMoreFail(); Logger.d("load more error"); loadMoreComplete(); } @Override public void loadMoreComplete() { // enable reload after load more completed bind.vContent.setEnabled(true); Logger.d("load more complete"); } }