package com.gh4a.fragment; import java.util.List; import android.os.Bundle; import android.support.v4.content.Loader; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import com.gh4a.adapter.RootAdapter; import com.gh4a.loader.LoaderCallbacks; import com.gh4a.loader.LoaderResult; public abstract class ListDataBaseFragment<T> extends LoadingListFragmentBase { private RootAdapter<T, ? extends RecyclerView.ViewHolder> mAdapter; private final LoaderCallbacks<List<T>> mLoaderCallback = new LoaderCallbacks<List<T>>(this) { @Override protected Loader<LoaderResult<List<T>>> onCreateLoader() { return ListDataBaseFragment.this.onCreateLoader(); } @Override protected void onResultReady(List<T> result) { mAdapter.clear(); onAddData(mAdapter, result); setContentShown(true); updateEmptyState(); getActivity().supportInvalidateOptionsMenu(); } @Override protected boolean onError(Exception e) { return onLoaderError(e); } }; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setContentShown(false); getLoaderManager().initLoader(0, null, mLoaderCallback); } @Override public void onRefresh() { hideContentAndRestartLoaders(0); if (mAdapter != null) { mAdapter.clear(); } } @Override protected boolean hasDividers() { return !mAdapter.isCardStyle(); } protected void onAddData(RootAdapter<T, ?> adapter, List<T> data) { adapter.addAll(data); adapter.notifyDataSetChanged(); } @Override protected void onRecyclerViewInflated(RecyclerView view, LayoutInflater inflater) { super.onRecyclerViewInflated(view, inflater); mAdapter = onCreateAdapter(); view.setAdapter(mAdapter); updateEmptyState(); } @Override protected boolean hasCards() { return mAdapter.isCardStyle(); } protected abstract Loader<LoaderResult<List<T>>> onCreateLoader(); protected abstract RootAdapter<T, ? extends RecyclerView.ViewHolder> onCreateAdapter(); protected boolean onLoaderError(Exception e) { return false; } }