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
- 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;
- 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;
- 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.