package com.frozendevs.periodictable.fragment; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.frozendevs.periodictable.R; import com.frozendevs.periodictable.activity.PropertiesActivity; import com.frozendevs.periodictable.model.ElementProperties; import com.frozendevs.periodictable.model.adapter.IsotopesAdapter; import com.frozendevs.periodictable.view.RecyclerView; import com.frozendevs.periodictable.widget.DividerDecoration; import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.expandable.RecyclerViewExpandableItemManager; import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; public class IsotopesFragment extends Fragment { private static final String SAVED_STATE_EXPANDABLE_ITEM_MANAGER = "RecyclerViewExpandableItemManager"; private RecyclerView.Adapter mWrappedAdapter; private RecyclerViewExpandableItemManager mRecyclerViewExpandableItemManager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.properties_fragment, container, false); final RecyclerView recyclerView = (RecyclerView) layout.findViewById(R.id.properties_list); final Parcelable savedState = (savedInstanceState != null) ? savedInstanceState.getParcelable(SAVED_STATE_EXPANDABLE_ITEM_MANAGER) : null; mRecyclerViewExpandableItemManager = new RecyclerViewExpandableItemManager(savedState); ElementProperties properties = (ElementProperties) getArguments().get( PropertiesActivity.ARGUMENT_PROPERTIES); IsotopesAdapter adapter = new IsotopesAdapter(getActivity(), properties.getIsotopes()); mWrappedAdapter = mRecyclerViewExpandableItemManager.createWrappedAdapter(adapter); GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); animator.setSupportsChangeAnimations(false); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(mWrappedAdapter); recyclerView.addItemDecoration(new DividerDecoration(getActivity())); recyclerView.setItemAnimator(animator); mRecyclerViewExpandableItemManager.attachRecyclerView(recyclerView); getActivity().registerForContextMenu(recyclerView); return layout; } @Override public void onDestroyView() { if (mRecyclerViewExpandableItemManager != null) { mRecyclerViewExpandableItemManager.release(); } if (mWrappedAdapter != null) { WrapperAdapterUtils.releaseAll(mWrappedAdapter); } super.onDestroyView(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mRecyclerViewExpandableItemManager != null) { outState.putParcelable(SAVED_STATE_EXPANDABLE_ITEM_MANAGER, mRecyclerViewExpandableItemManager.getSavedState()); } } }