package com.thekhaeng.recyclerviewmargindecoration; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.hwangjr.rxbus.RxBus; import com.hwangjr.rxbus.annotation.Subscribe; import com.thekhaeng.recyclerviewmargin.LayoutMarginDecoration; import com.thekhaeng.recyclerviewmargin.OnClickLayoutMarginItemListener; import com.thekhaeng.recyclerviewmargindecoration.event.MarginData; import static com.thekhaeng.recyclerviewmargindecoration.MainActivity.PagerStateAdapter.GRID; import static com.thekhaeng.recyclerviewmargindecoration.MainActivity.PagerStateAdapter.LINEAR; import static com.thekhaeng.recyclerviewmargindecoration.MainActivity.PagerStateAdapter.STAGGERED_GRID; public class MarginFragment extends Fragment{ public static final String KEY_LAYOUT = "key_layout"; public static final String KEY_SPACE = "key_space"; public static final String KEY_TOP_MARGIN = "key_top_margin"; public static final String KEY_LEFT_MARGIN = "key_left_margin"; public static final String KEY_RIGHT_MARGIN = "key_right_margin"; public static final String KEY_BOTTOM_MARGIN = "key_bottom_margin"; private LayoutMarginDecoration linearMargin; private LayoutMarginDecoration gridMargin; private LayoutMarginDecoration stagMargin; private RecyclerView rvMargin; public static MarginFragment newInstance( Bundle bundle ){ MarginFragment fragment = new MarginFragment(); fragment.setArguments( bundle ); return fragment; } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ){ RxBus.get().register( this ); View rootView = inflater.inflate( R.layout.fragment_margin, container, false ); initInstance( rootView ); return rootView; } @Override public void onActivityCreated( Bundle savedInstanceState ){ super.onActivityCreated( savedInstanceState ); } @Override public void onDestroyView(){ super.onDestroyView(); RxBus.get().unregister( this ); } @SuppressWarnings( "UnusedParameters" ) private void initInstance( View rootView ){ int orientation = getResources().getConfiguration().orientation; int orientationLinear; int orientationGrid; int orientationStaggeredGrid; if( orientation == Configuration.ORIENTATION_PORTRAIT ){ orientationLinear = LinearLayoutManager.VERTICAL; orientationGrid = GridLayoutManager.VERTICAL; orientationStaggeredGrid = StaggeredGridLayoutManager.VERTICAL; }else{ orientationLinear = LinearLayoutManager.HORIZONTAL; orientationGrid = GridLayoutManager.HORIZONTAL; orientationStaggeredGrid = StaggeredGridLayoutManager.HORIZONTAL; } rvMargin = (RecyclerView) rootView.findViewById( R.id.rv_margin ); int itemSpace = getSpace(); int layout = getArguments().getInt( KEY_LAYOUT ); if( layout == LINEAR ){ rvMargin.removeItemDecoration( linearMargin ); LinearLayoutManager layout1 = new LinearLayoutManager( getContext(), orientationLinear, false ); rvMargin.setLayoutManager( layout1 ); linearMargin = new LayoutMarginDecoration( itemSpace ); linearMargin.setPadding( rvMargin, getMarginTop(), getMarginBottom(), getMarginLeft(), getMarginRight() ); linearMargin.setOnClickLayoutMarginItemListener( onClickItem() ); rvMargin.addItemDecoration( linearMargin ); }else if( layout == GRID ){ int gridSpan = 3; rvMargin.removeItemDecoration( gridMargin ); rvMargin.setLayoutManager( new GridLayoutManager( getContext(), gridSpan, orientationGrid, false ) ); gridMargin = new LayoutMarginDecoration( gridSpan, itemSpace ); gridMargin.setPadding( rvMargin, getMarginTop(), getMarginBottom(), getMarginLeft(), getMarginRight() ); gridMargin.setOnClickLayoutMarginItemListener( onClickItem() ); rvMargin.addItemDecoration( gridMargin ); }else if( layout == STAGGERED_GRID ){ int stagSpan = 3; rvMargin.removeItemDecoration( stagMargin ); rvMargin.setLayoutManager( new StaggeredGridLayoutManager( stagSpan, orientationStaggeredGrid ) ); stagMargin = new LayoutMarginDecoration( stagSpan, itemSpace ); stagMargin.setPadding( rvMargin, getMarginTop(), getMarginBottom(), getMarginLeft(), getMarginRight() ); stagMargin.setOnClickLayoutMarginItemListener( onClickItem() ); rvMargin.addItemDecoration( stagMargin ); } rvMargin.setAdapter( new MarginAdapter( getContext() ) ); } public int getSpace(){ return (int) getArguments().getFloat( KEY_SPACE ); } private int getMarginTop(){ return (int) getArguments().getFloat( KEY_TOP_MARGIN ); } private int getMarginBottom(){ return (int) getArguments().getFloat( KEY_BOTTOM_MARGIN ); } private int getMarginLeft(){ return (int) getArguments().getFloat( KEY_LEFT_MARGIN ); } private int getMarginRight(){ return (int) getArguments().getFloat( KEY_RIGHT_MARGIN ); } @Subscribe public void onMarginData( MarginData event ){ Bundle args = getArguments(); args.putFloat( KEY_SPACE, event.getSpace() ); args.putFloat( KEY_TOP_MARGIN, event.getMarginTop() ); args.putFloat( KEY_LEFT_MARGIN, event.getMarginLeft() ); args.putFloat( KEY_RIGHT_MARGIN, event.getMarginRight() ); args.putFloat( KEY_BOTTOM_MARGIN, event.getMarginBottom() ); initInstance( getView() ); } @NonNull private OnClickLayoutMarginItemListener onClickItem(){ return new OnClickLayoutMarginItemListener(){ @Override public void onClick( Context context, View v, int position, int spanIndex, RecyclerView.State state ){ Toast.makeText( context, "item: " + position + "\ncolumn: " + spanIndex, Toast.LENGTH_SHORT ).show(); } }; } }