package com.aspsine.swipetoloadlayout.demo.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ListView; 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.LoopViewPagerAdapter; import com.aspsine.swipetoloadlayout.demo.adapter.OnChildItemClickListener; import com.aspsine.swipetoloadlayout.demo.adapter.OnChildItemLongClickListener; import com.aspsine.swipetoloadlayout.demo.adapter.SectionAdapter; import com.aspsine.swipetoloadlayout.demo.model.Character; import com.aspsine.swipetoloadlayout.demo.model.SectionCharacters; /** * A simple {@link Fragment} subclass. */ public class TwitterListViewFragment extends Fragment implements OnRefreshListener, OnLoadMoreListener, OnChildItemClickListener<Character>, OnChildItemLongClickListener<Character> { public static final String TAG = TwitterListViewFragment.class.getSimpleName(); private SwipeToLoadLayout swipeToLoadLayout; private ListView listView; private ViewPager viewPager; private ViewGroup indicators; private SectionAdapter mAdapter; private LoopViewPagerAdapter mPagerAdapter; public TwitterListViewFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new SectionAdapter(); mAdapter.setOnChildItemClickListener(this); mAdapter.setOnChildItemLongClickListener(this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_twitter_listview, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); View pagerView = LayoutInflater.from(view.getContext()).inflate(R.layout.layout_viewpager, listView, false); swipeToLoadLayout = (SwipeToLoadLayout) view.findViewById(R.id.swipeToLoadLayout); listView = (ListView) view.findViewById(R.id.swipe_target); viewPager = (ViewPager) pagerView.findViewById(R.id.viewPager); indicators = (ViewGroup) pagerView.findViewById(R.id.indicators); viewPager.addOnPageChangeListener(mPagerAdapter); listView.addHeaderView(pagerView); listView.setAdapter(mAdapter); listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { if (view.getLastVisiblePosition() == view.getCount() - 1 && !ViewCompat.canScrollVertically(view, 1)) { swipeToLoadLayout.setLoadingMore(true); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) { if (mPagerAdapter != null) { mPagerAdapter.start(); } } else { if (mPagerAdapter != null) { mPagerAdapter.stop(); } } } }); swipeToLoadLayout.setOnRefreshListener(this); swipeToLoadLayout.setOnLoadMoreListener(this); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); swipeToLoadLayout.post(new Runnable() { @Override public void run() { swipeToLoadLayout.setRefreshing(true); } }); } @Override public void onResume() { super.onResume(); if (mPagerAdapter != null) { mPagerAdapter.start(); } } @Override public void onPause() { super.onPause(); App.getRequestQueue().cancelAll(TAG); if (swipeToLoadLayout.isRefreshing()) { swipeToLoadLayout.setRefreshing(false); } if (swipeToLoadLayout.isLoadingMore()) { swipeToLoadLayout.setLoadingMore(false); } if (mPagerAdapter != null) { mPagerAdapter.stop(); } } @Override public void onRefresh() { GsonRequest request = new GsonRequest<SectionCharacters>(Constants.API.CHARACTERS, SectionCharacters.class, new Response.Listener<SectionCharacters>() { @Override public void onResponse(SectionCharacters characters) { mAdapter.setList(characters.getSections()); if (viewPager.getAdapter() == null) { mPagerAdapter = new LoopViewPagerAdapter(viewPager, indicators); viewPager.setAdapter(mPagerAdapter); viewPager.addOnPageChangeListener(mPagerAdapter); mPagerAdapter.setList(characters.getCharacters()); viewPager.setBackgroundDrawable(getResources().getDrawable(R.mipmap.bg_viewpager)); } else { mPagerAdapter = (LoopViewPagerAdapter) viewPager.getAdapter(); mPagerAdapter.setList(characters.getCharacters()); } 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); } }, 1000); } @Override public void onChildItemClick(int groupPosition, int childPosition, Character character, View view) { Toast.makeText(getActivity(), character.getName() + " Click", Toast.LENGTH_SHORT).show(); } @Override public boolean onClickItemLongClick(int groupPosition, int childPosition, Character character, View view) { Toast.makeText(getActivity(), character.getName() + " Long Click", Toast.LENGTH_SHORT).show(); return true; } }