package com.aspsine.swipetoloadlayout.demo.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;
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.model.Character;
import com.aspsine.swipetoloadlayout.demo.model.SectionCharacters;
import com.squareup.picasso.Picasso;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class TwitterScrollViewFragment extends BaseFragment implements OnRefreshListener, OnLoadMoreListener {
private static final String TAG = TwitterScrollViewFragment.class.getSimpleName();
private SwipeToLoadLayout swipeToLoadLayout;
private ScrollView scrollView;
private TextView tvTitle;
private ImageView[] ivArray;
public TwitterScrollViewFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_twitter_scroll_view, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
swipeToLoadLayout = (SwipeToLoadLayout) view.findViewById(R.id.swipeToLoadLayout);
scrollView = (ScrollView) view.findViewById(R.id.swipe_target);
tvTitle = (TextView) view.findViewById(R.id.tvTitle);
ViewGroup viewGroup = (ViewGroup) view.findViewById(R.id.group);
// use this method find view is not an good way.
// do not learn! do not learn! do not learn! important thing say three times. :)
ivArray = new ImageView[viewGroup.getChildCount()];
for (int i = 0; i < viewGroup.getChildCount(); i++) {
ivArray[i] = (ImageView) viewGroup.getChildAt(i);
}
swipeToLoadLayout.setOnRefreshListener(this);
swipeToLoadLayout.setOnLoadMoreListener(this);
scrollView.getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener);
}
ViewTreeObserver.OnScrollChangedListener mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
if (scrollView.getChildAt(0).getHeight() < scrollView.getScrollY() + scrollView.getHeight() && !ViewCompat.canScrollVertically(scrollView, 1)) {
swipeToLoadLayout.setLoadingMore(true);
}
}
};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
swipeToLoadLayout.post(new Runnable() {
@Override
public void run() {
swipeToLoadLayout.setRefreshing(true);
}
});
}
@Override
public void onPause() {
super.onPause();
App.getRequestQueue().cancelAll(TAG);
if (swipeToLoadLayout.isRefreshing()) {
swipeToLoadLayout.setRefreshing(false);
}
if (swipeToLoadLayout.isLoadingMore()) {
swipeToLoadLayout.setLoadingMore(false);
}
}
@Override
public void onDestroyView() {
scrollView.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);
super.onDestroyView();
}
@Override
public void onRefresh() {
GsonRequest request = new GsonRequest<SectionCharacters>(Constants.API.CHARACTERS, SectionCharacters.class, new Response.Listener<SectionCharacters>() {
@Override
public void onResponse(SectionCharacters sectionCharacters) {
List<Character> characters = sectionCharacters.getCharacters();
for (int i = 0; i < characters.size(); i++) {
String img = characters.get(i).getAvatar();
if (i < ivArray.length) {
Picasso.with(getActivity()).load(img).into(ivArray[i]);
}
}
swipeToLoadLayout.setRefreshing(false);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
swipeToLoadLayout.setRefreshing(false);
volleyError.printStackTrace();
}
});
App.getRequestQueue().add(request).setTag(TAG);
}
@Override
public void onLoadMore() {
swipeToLoadLayout.postDelayed(new Runnable() {
@Override
public void run() {
swipeToLoadLayout.setLoadingMore(false);
}
}, 3000);
}
}