package com.florianmski.tracktoid.ui.fragments.base.list; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.view.View; import com.florianmski.tracktoid.adapters.RecyclerAdapter; import com.florianmski.tracktoid.containers.ViewContainer; import java.util.ArrayList; import java.util.List; public abstract class ItemRecyclerViewFragment<E> extends ItemScrollFragment<E, List<E>, RecyclerView, RecyclerView.OnScrollListener, RecyclerAdapter<E, ?>> { private RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); for(RecyclerView.OnScrollListener scrollListener : scrollListeners) scrollListener.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); for(RecyclerView.OnScrollListener scrollListener : scrollListeners) scrollListener.onScrolled(recyclerView, dx, dy); View v = recyclerView.getChildAt(0); if(v == null) return; if(dy > 0 && v.getTop() < 0) showActionBar(false); else if(dy < 0) showActionBar(true); } }; protected abstract RecyclerView.LayoutManager getLayoutManager(); public ItemRecyclerViewFragment() { super(new ViewContainer.RecyclerViewContainer<E>()); data = new ArrayList<>(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getGroupView().setHasFixedSize(hasFixedSize()); getGroupView().setLayoutManager(getLayoutManager()); getGroupView().setOnScrollListener(onScrollListener); } @Override protected void refreshView(List<E> data) { getAdapter().refresh(data); } @Override protected boolean isEmpty(List<E> data) { return data == null || data.isEmpty(); } protected abstract RecyclerAdapter<E, ?> createAdapter(final List<E> items); @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); viewContainer.setAdapter(createAdapter(data)); } @Override public void onDestroy() { super.onDestroy(); } public E getItem(int position) { return data.get(position); } protected RecyclerAdapter<E, ?> getAdapter() { return viewContainer.getAdapter(); } protected boolean hasFixedSize() { return true; } }