package com.aspsine.swipetoloadlayout.demo.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.GsonRequest;
import com.aspsine.swipetoloadlayout.OnLoadMoreListener;
import com.aspsine.swipetoloadlayout.OnRefreshListener;
import com.aspsine.swipetoloadlayout.SwipeToLoadLayout;
import com.aspsine.swipetoloadlayout.demo.App;
import com.aspsine.swipetoloadlayout.demo.Constants;
import com.aspsine.swipetoloadlayout.demo.R;
import com.aspsine.swipetoloadlayout.demo.adapter.RecyclerCharactersAdapter;
import com.aspsine.swipetoloadlayout.demo.model.SectionCharacters;
/**
* Created by Aspsine on 2015/9/10.
*/
public class GoogleStyleFragment extends BaseFragment implements OnRefreshListener, OnLoadMoreListener {
public static final String TAG = GoogleStyleFragment.class.getSimpleName();
public static final String GOOGLE_REFRESH_TYPE = "google_refresh_type";
private int mType;
private int mPageNum;
private RecyclerView recyclerView;
private SwipeToLoadLayout swipeToLoadLayout;
private RecyclerCharactersAdapter mAdapter;
public static GoogleStyleFragment newInstance(int type) {
GoogleStyleFragment fragment = new GoogleStyleFragment();
Bundle bundle = new Bundle();
bundle.putInt(GOOGLE_REFRESH_TYPE, type);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mType = getArguments().getInt(GOOGLE_REFRESH_TYPE, 0);
mAdapter = new RecyclerCharactersAdapter(0);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final int layoutId;
if (mType == 0) {
layoutId = R.layout.fragment_google_style;
} else {
layoutId = R.layout.fragment_google_style_custom;
}
return inflater.inflate(layoutId, container, false);
}
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
swipeToLoadLayout = (SwipeToLoadLayout) view.findViewById(R.id.swipeToLoadLayout);
recyclerView = (RecyclerView) view.findViewById(R.id.swipe_target);
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
recyclerView.setAdapter(mAdapter);
swipeToLoadLayout.setOnRefreshListener(this);
swipeToLoadLayout.setOnLoadMoreListener(this);
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE ){
if (!ViewCompat.canScrollVertically(recyclerView, 1)){
swipeToLoadLayout.setLoadingMore(true);
}
}
}
});
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
swipeToLoadLayout.post(new Runnable() {
@Override
public void run() {
swipeToLoadLayout.setRefreshing(true);
}
});
}
@Override
public void onResume() {
super.onResume();
mAdapter.start();
}
@Override
public void onPause() {
super.onPause();
App.getRequestQueue().cancelAll(TAG + "refresh" + mType);
App.getRequestQueue().cancelAll(TAG + "loadmore" + mType);
if (swipeToLoadLayout.isRefreshing()) {
swipeToLoadLayout.setRefreshing(false);
}
if (swipeToLoadLayout.isLoadingMore()) {
swipeToLoadLayout.setLoadingMore(false);
}
mAdapter.stop();
}
@Override
public void onRefresh() {
GsonRequest request = new GsonRequest<SectionCharacters>(Constants.API.CHARACTERS, SectionCharacters.class, new Response.Listener<SectionCharacters>() {
@Override
public void onResponse(final SectionCharacters characters) {
// here, I use post delay to show more animation, you don't have to.
swipeToLoadLayout.postDelayed(new Runnable() {
@Override
public void run() {
mPageNum = 0;
mAdapter.setList(characters.getCharacters(), characters.getSections().subList(0, mPageNum + 1));
swipeToLoadLayout.setRefreshing(false);
}
}, 3000);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
swipeToLoadLayout.setRefreshing(false);
volleyError.printStackTrace();
}
});
App.getRequestQueue().add(request).setTag(TAG + "refresh" + mType);
}
@Override
public void onLoadMore() {
GsonRequest request = new GsonRequest<SectionCharacters>(Constants.API.CHARACTERS, SectionCharacters.class, new Response.Listener<SectionCharacters>() {
@Override
public void onResponse(final SectionCharacters characters) {
// here, I use post delay to show more animation, you don't have to.
swipeToLoadLayout.postDelayed(new Runnable() {
@Override
public void run() {
if (mPageNum < 3) {
mPageNum++;
mAdapter.append(characters.getSections().subList(mPageNum, mPageNum + 1));
} else {
Toast.makeText(getContext(), "Done", Toast.LENGTH_SHORT).show();
}
swipeToLoadLayout.setLoadingMore(false);
}
}, 2000);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
swipeToLoadLayout.setLoadingMore(false);
volleyError.printStackTrace();
}
});
App.getRequestQueue().add(request).setTag(TAG + "loadmore" + mType);
}
}