package com.konifar.materialcat.views.fragments; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.FrameLayout; import com.konifar.materialcat.PhotoDetailActivity; import com.konifar.materialcat.R; import com.konifar.materialcat.events.PhotoSearchCallbackEvent; import com.konifar.materialcat.models.PhotoModel; import com.konifar.materialcat.models.pojo.Photo; import com.konifar.materialcat.views.ListLoadingView; import com.konifar.materialcat.views.adapters.PhotosArrayAdapter; import com.konifar.materialcat.views.listeners.OnLoadMoreScrollListener; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnItemClick; import de.greenrobot.event.EventBus; import jp.co.recruit_mp.android.widget.HeaderFooterGridView; public class CatsGridFragment extends Fragment { private static final String ARG_KEY_SORT = "arg_key_sort"; @Bind(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh; @Bind(R.id.grid_view) HeaderFooterGridView gridView; @Bind(R.id.loading) FrameLayout loading; private PhotosArrayAdapter adapter; private ListLoadingView loadingFooter; private String sort; public static CatsGridFragment newInstance(String sort) { CatsGridFragment fragment = new CatsGridFragment(); Bundle bundle = new Bundle(); bundle.putString(ARG_KEY_SORT, sort); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle arguments = getArguments(); if (arguments.containsKey(ARG_KEY_SORT)) { sort = arguments.getString(ARG_KEY_SORT); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_cats_grid, container, false); ButterKnife.bind(this, view); initGridView(); initSwipeRefresh(); showList(1); return view; } private void initSwipeRefresh() { swipeRefresh.setColorSchemeResources(R.color.theme500); swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { showList(1); } }); } @Override public void onResume() { super.onResume(); EventBus.getDefault().register(this); } @Override public void onPause() { super.onPause(); EventBus.getDefault().unregister(this); } private void initGridView() { adapter = new PhotosArrayAdapter(getActivity()); loadingFooter = new ListLoadingView(getActivity()); gridView.addFooterView(loadingFooter); gridView.setAdapter(adapter); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { gridView.setNestedScrollingEnabled(true); } } @OnItemClick(R.id.grid_view) void onItemClick(AdapterView<?> parent, View view, int position, long id) { Photo photo = adapter.getItem(position); PhotoDetailActivity.start(getActivity(), view, photo); } private void showList(final int page) { if (page > 1) loadingFooter.switchVisible(true); PhotoModel.getInstance(getActivity()).getCatPhotos(page, sort); } private void initListViewScrollListener() { AbsListView.OnScrollListener scrollListener = (AbsListView.OnScrollListener) getActivity(); gridView.setOnScrollListener(new OnLoadMoreScrollListener(scrollListener) { @Override public void onLoadMore(int page, int totalItemsCount) { showList(page); } }); } public void onEvent(PhotoSearchCallbackEvent event) { if (!sort.equals(event.getSort())) return; if (swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); adapter.clear(); } if (event.isSuccess()) { adapter.addAll(event.getPhotos()); } if (loading.getVisibility() == View.VISIBLE) { initListViewScrollListener(); loading.setVisibility(View.GONE); } loadingFooter.switchVisible(false); } }