package com.halzhang.android.apps.startupnews.ui.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.halzhang.android.apps.startupnews.R;
import com.halzhang.android.apps.startupnews.ui.widgets.CardViewDividerDecoration;
import com.halzhang.android.apps.startupnews.ui.widgets.DividerDecoration;
public abstract class SwipeRefreshRecyclerFragment extends Fragment {
private static final String LOG_TAG = SwipeRefreshRecyclerFragment.class.getSimpleName();
protected SwipeRefreshLayout mSwipeRefreshLayout;
protected RecyclerView mRecyclerView;
private LinearLayoutManager mLinearLayoutManager;
public SwipeRefreshRecyclerFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected abstract int getViewLayout();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(getViewLayout(), null);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_layout);
if (mRecyclerView == null || mSwipeRefreshLayout == null) {
throw new IllegalArgumentException("mush be have RecyclerView and SwipeRefreshLayout");
}
mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light, android.R.color.holo_blue_light);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
onRefreshData();
}
});
mLinearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
boolean enable = false;
int visibleItemCount = mRecyclerView.getChildCount();
int itemCount = mLinearLayoutManager.getItemCount();
int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = mLinearLayoutManager.findLastVisibleItemPosition();
// if (visibleItemCount > 0) {
// boolean firstItemVisible = firstVisibleItemPosition == 0;
// boolean topOfFirstItemVisible = mLinearLayoutManager.getChildAt(0).getTop() == 0;
// enable = firstItemVisible && topOfFirstItemVisible;
// Log.d(LOG_TAG, "SwipeRefreshLayout enable: " + enable);
// }
// mSwipeRefreshLayout.setEnabled(enable);
if (lastVisibleItemPosition == itemCount - 1) {
onLoadMore();
}
}
});
mRecyclerView.addItemDecoration(new CardViewDividerDecoration(getActivity()));
return view;
}
/**
* 刷新数据
*/
protected void onRefreshData() {
}
/**
* 加载更多
*/
protected void onLoadMore() {
}
protected void onRefreshComplete() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(false);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}