package com.swifty.fillcolor.controller.main; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.SwipeRefreshLayout; 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.Button; import android.widget.RelativeLayout; import android.widget.Toast; import com.swifty.fillcolor.MyApplication; import com.swifty.fillcolor.listener.OnThemeListLoadListener; import com.swifty.fillcolor.R; import com.swifty.fillcolor.controller.BaseFragment; import com.swifty.fillcolor.controller.categorylist.GridViewActivity; import com.swifty.fillcolor.model.OnRecycleViewItemClickListener; import com.swifty.fillcolor.model.ThemeListFragmentModel; import com.swifty.fillcolor.model.bean.ThemeBean; import com.swifty.fillcolor.util.L; import com.swifty.fillcolor.util.ListAnimationUtil; import com.swifty.fillcolor.util.NetWorkUtil; import com.swifty.fillcolor.util.UmengUtil; import java.util.ArrayList; import java.util.List; import java.util.Locale; import jp.wasabeef.recyclerview.animators.adapters.AlphaInAnimationAdapter; /** * Created by Swifty.Wang on 2015/8/14. */ public class ThemeListFragment extends BaseFragment { private static final int ONEPAGENUMBER = 20; private static ThemeListFragment fragment; RecyclerView listView; FloatingActionButton floatingActionButton; Button footer; private int preLast; List<ThemeBean.Theme> themelist; private ThemeListAdapter adapter; private AlphaInAnimationAdapter alphaAdapter; int id = 0; private String search; LinearLayoutManager layoutManager; private boolean isLoading; private int page; SwipeRefreshLayout refreshLayout; public static ThemeListFragment getInstance() { if (fragment == null) { fragment = new ThemeListFragment(); } fragment.setRetainInstance(true); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_theme_list, container, false); initViews(rootView); if (themelist == null) { loadData(LoadModel.normal); L.e("normal"); } else { L.e("nochange"); loadData(LoadModel.nochange); } return rootView; } private void initViews(View rootView) { refreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swiperefresh); swipeRefreshLayout = refreshLayout; listView = (RecyclerView) rootView.findViewById(R.id.theme_list); floatingActionButton = (FloatingActionButton) rootView.findViewById(R.id.floating); layoutManager = new LinearLayoutManager(getActivity()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); listView.setLayoutManager(layoutManager); refreshLayout.setColorSchemeResources(R.color.red, R.color.orange, R.color.green, R.color.maincolor); footer = (Button) LayoutInflater.from(getActivity()).inflate(R.layout.textview_footer, null).findViewById(R.id.footer); refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { loadData(LoadModel.refresh); } }); floatingActionButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { listTop(); } }); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) floatingActionButton.getLayoutParams(); p.setMargins(0, 0, 0, 0); // get rid of margins since shadow area is now the margin floatingActionButton.setLayoutParams(p); } } private void listTop() { listView.smoothScrollToPosition(0); } private void loadData(LoadModel model) { switch (model) { case nochange: addListListener(); break; case normal: refreshLayout.post(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(true); } }); ThemeListFragmentModel.getInstance().loadData(getActivity(), new OnThemeListLoadListener() { @Override public void onLoadFinish(List<ThemeBean.Theme> themes) { refreshLayout.post(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(false); } }); themelist = new ArrayList<ThemeBean.Theme>(); themelist.add(new ThemeBean.Theme(-1, getString(R.string.secretGarden), 0)); if (themes != null && !themes.isEmpty()) { themelist.addAll(themes); } else { Toast.makeText(getActivity(), getString(R.string.loadfailed), Toast.LENGTH_SHORT).show(); } page = themelist.size() / ONEPAGENUMBER - 1; addListListener(); } }); break; case refresh: isLoading = false; footer.setText(R.string.clickloadmore); if (NetWorkUtil.isNetworkConnected(getActivity())) { ThemeListFragmentModel.getInstance().refreshListContent(getActivity(), new OnThemeListLoadListener() { @Override public void onLoadFinish(List<ThemeBean.Theme> themes) { L.e("start refresh"); themelist.clear(); themelist.add(new ThemeBean.Theme(-1, getString(R.string.secretGarden), 0)); if (themes != null && !themes.isEmpty()) { themelist.addAll(themes); L.e(themelist.size() + ""); } else { Toast.makeText(getActivity(), getString(R.string.loadfailed), Toast.LENGTH_SHORT).show(); } page = 0; alphaAdapter.notifyDataSetChanged(); refreshLayout.setRefreshing(false); } }); } else { Toast.makeText(getActivity(), getString(R.string.network_notconnet), Toast.LENGTH_SHORT).show(); refreshLayout.setRefreshing(false); } break; case loadmore: isLoading = true; footer.setText(R.string.loadmoretheme); L.e(isAdded() + ""); ThemeListFragmentModel.getInstance().loadMoreData(getActivity(), ++page, new OnThemeListLoadListener() { @Override public void onLoadFinish(List<ThemeBean.Theme> names) { if (names == null) { --page; isLoading = false; footer.setText(R.string.loadfailed); } else if (names.isEmpty()) { --page; footer.setText(R.string.nomoredata); } else { int presize = themelist.size(); themelist.addAll(names); alphaAdapter.notifyItemInserted(presize); footer.setText(R.string.clickloadmore); isLoading = false; } } }); break; } } private void addListListener() { adapter = new ThemeListAdapter(getActivity(), themelist, footer); adapter.setOnRecycleViewItemClickListener(new OnRecycleViewItemClickListener() { @Override public void recycleViewItemClickListener(View view, int i) { if (search == null || search.isEmpty()) { gotoDetailGridActivity(i); } else { int pos = getThemeIndex(search, i); if (pos != -1) { gotoDetailGridActivity(pos); } } } }); alphaAdapter = ListAnimationUtil.addAlphaAnim(adapter); listView.setAdapter(alphaAdapter); listView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); int pastVisiblesItems = layoutManager.findFirstVisibleItemPosition(); if (!isLoading && themelist == adapter.getList()) { //filter dont show footer view and not loading more items ((View) footer.getParent()).setVisibility(View.VISIBLE); if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) { L.e("start loadmre"); loadData(LoadModel.loadmore); } } } }); } private int getThemeIndex(String search, int pos) { int index = 0; for (int i = 0; i < themelist.size(); i++) { if (themelist.get(i).getN().contains(search)) { if (pos == index) { return i; } index++; } } return -1; } private void gotoDetailGridActivity(int i) { UmengUtil.analysitic(getActivity(), UmengUtil.THEMENAME, themelist.get(i).getN()); Intent intent = new Intent(getActivity(), GridViewActivity.class); intent.putExtra(MyApplication.THEMEID, themelist.get(i).getC()); intent.putExtra(MyApplication.THEMENAME, themelist.get(i).getN()); startActivity(intent); } public void filterData(String filterStr) { try { ((View) footer.getParent()).setVisibility(View.GONE); search = filterStr; List<ThemeBean.Theme> filterDateList = new ArrayList<ThemeBean.Theme>(); if (filterStr.isEmpty()) { refreshLayout.setEnabled(true); filterDateList = themelist; } else { refreshLayout.setEnabled(false); filterDateList.clear(); for (ThemeBean.Theme theme : themelist) { if (theme.getN().toLowerCase(Locale.getDefault()).contains(filterStr.toLowerCase(Locale.getDefault()))) filterDateList.add(theme); } } adapter.updateListView(filterDateList); alphaAdapter.notifyDataSetChanged(); } catch (Exception e) { } } public void finish() { L.e("Themefinish"); fragment = null; } private enum LoadModel { normal, refresh, loadmore, nochange, } }