Lograr ViewPager + Fragmento de la Gestión del Ciclo de Vida Fragmento

ViewPager fragmento combinado con efecto de deslizamiento se puede conseguir, y administrar de forma independiente el ciclo de vida de cada página de diapositivas. Hay dos adaptador principal ViewPager para adaptar el relleno Fragmento, que es diferente de la visión a través del código.

disposición

Fragmento diseño única para establecer un TextView.
Unirse a un ViewPager en el diseño de la actividad

adaptadores personalizados, adaptadores heredan dos clases de base diferentes

FragmentManager necesidad de pasar un adaptador de parámetro, se puede utilizar en la actividad en getSupportFragmentManager () para obtener, directamente en la lata.

FragmentPagerAdapter

    private static class FragmentVPAdapter extends FragmentPagerAdapter{
        private ArrayList<Fragment> fragments;

        public FragmentVPAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }
    }

FragmentStatePagerAdapter

    private static class FragmentStateVPAdapter extends FragmentStatePagerAdapter{
        private ArrayList<Fragment> fragments;

        public FragmentStateVPAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }
    }

Fragmento

Cada uno de nosotros somos las funciones de ciclo de vida para llevar a cabo un registro de salida Fragmento observó que en cada paso del cambio.


public class ViewPagerContentFragment extends Fragment {
    private String TAG = "Fragment";
    private String sid;

    public ViewPagerContentFragment(String sid) {
        this.sid = sid;
        TAG+=sid;
    }

    @Override
    public void onAttach(Context context) {
        Log.d(TAG, "onAttach: ");
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreate: ");
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView: ");
        View inflate = inflater.inflate(R.layout.viewpager_fragment_sample, container,false);
        TextView tv = inflate.findViewById(R.id.tv_in_vp);
        tv.setText(sid);
        return inflate;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.d(TAG, "onActivityCreated: ");
        super.onActivityCreated(savedInstanceState);
    }



    @Override
    public void onStart() {
        Log.d(TAG, "onStart: ");
        super.onStart();
    }

    @Override
    public void onResume() {
        Log.d(TAG, "onResume: ");
        super.onResume();
    }

    @Override
    public void onPause() {
        Log.d(TAG, "onPause: ");
        super.onPause();
    }

    @Override
    public void onStop() {
        Log.d(TAG, "onStop: ");
        super.onStop();
    }

    @Override
    public void onDestroyView() {
        Log.d(TAG, "onDestroyView: ");
        super.onDestroyView();
    }

    @Override
    public void onDestroy() {
        Log.d(TAG, "onDestroy: ");
        super.onDestroy();
    }

    @Override
    public void onDetach() {
        Log.d(TAG, "onDetach: ");
        super.onDetach();
    }
}

ejecución

uso FragmentPageAdapter

La etapa inicial

application D/Fragment0: onAttach: 
application D/Fragment0: onCreate: 
application D/Fragment1: onAttach: 
application D/Fragment1: onCreate: 
application D/Fragment0: onCreateView: 
application D/Fragment0: onActivityCreated: 
application D/Fragment0: onStart: 
application D/Fragment0: onResume: 
application D/Fragment1: onCreateView: 
application D/Fragment1: onActivityCreated: 
application D/Fragment1: onStart: 
application D/Fragment1: onResume: 

deslice dos veces

application D/Fragment2: onAttach: 
application D/Fragment2: onCreate: 
application D/Fragment2: onCreateView: 
application D/Fragment2: onActivityCreated: 
application D/Fragment2: onStart: 
application D/Fragment2: onResume: 
application D/Fragment3: onAttach: 
application D/Fragment3: onCreate: 
application D/Fragment0: onPause: 
application D/Fragment0: onStop: 
application D/Fragment0: onDestroyView: 
application D/Fragment3: onCreateView: 
application D/Fragment3: onActivityCreated: 
application D/Fragment3: onStart: 
application D/Fragment3: onResume: 

uso FragmentStatePageAdapter

La etapa inicial

application D/Fragment0: onAttach: 
application D/Fragment0: onCreate: 
application D/Fragment1: onAttach: 
application D/Fragment1: onCreate: 
application D/Fragment0: onCreateView: 
application D/Fragment0: onActivityCreated: 
application D/Fragment0: onStart: 
application D/Fragment0: onResume: 
application D/Fragment1: onCreateView: 
application D/Fragment1: onActivityCreated: 
application D/Fragment1: onStart: 
application D/Fragment1: onResume: 

deslice dos veces

application D/Fragment2: onAttach: 
application D/Fragment2: onCreate: 
application D/Fragment2: onCreateView: 
application D/Fragment2: onActivityCreated: 
application D/Fragment2: onStart: 
application D/Fragment2: onResume: 
application D/Fragment3: onAttach: 
application D/Fragment3: onCreate: 
application D/Fragment0: onPause: 
application D/Fragment0: onStop: 
application D/Fragment0: onDestroyView: 
application D/Fragment0: onDestroy: 
application D/Fragment0: onDetach: 
application D/Fragment3: onCreateView: 
application D/Fragment3: onActivityCreated: 
application D/Fragment3: onStart: 
application D/Fragment3: onResume: 

conclusión

  1. ViewPager por defecto mantendrá el contenido de la página actual y dos delante y detrás, que es un total de tres. Inicio no tan solamente antes de salir de la página actual y la siguiente página;
  2. Para el contenido no se conserva, FragmentPagerAdapter sólo para destroyView del fragmento no va a destruir y separar, y lleva a cabo FragmentStatePagerAdapter destruir y separar, cuando el plan va a volver de nuevo para realizar atar y crear;
  3. Por lo tanto, FragmentPagerAdapter adecuado para un menor número de escenas, un espacio de tiempo; FragmentStatePagerAdapter aplicable a un mayor número de escenas, para ejecutar cada destruir, ahorrar memoria.

Supongo que te gusta

Origin www.cnblogs.com/pravez/p/12604355.html
Recomendado
Clasificación