スライド効果と組み合わさViewPagerフラグメントが達成され、独立して各スライドページのライフサイクルを管理することができます。コードを見るとは異なる充填フラグメントを適合するための2つの主ViewPagerアダプタがあります。
レイアウト
フラグメントレイアウトが唯一のTextViewを設定します。
アクティビティレイアウトでViewPagerに参加
カスタムアダプタは、アダプタは、二つの異なる基底クラスを継承します
パラメータアダプタを通過するFragmentManager必要がgetSupportFragmentManagerの活動に使用することができる()を直接缶に、得ました。
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();
}
}
断片
私たちはそれぞれのライフサイクル機能は、フラグメントは、変更のすべてのステップすることが観察されたログ出力を行うようにしています。
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();
}
}
実行
使用FragmentPageAdapter
初期段階
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:
二回スライド
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:
使用FragmentStatePageAdapter
初期段階
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:
二回スライド
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:
結論
- ViewPagerのデフォルトは3の合計で現在のページと2つのフロントとリアの内容を、維持します。ホームではないので、現在のページと次のページを離れる前に、
- 保持されていないコンテンツの場合、断片のみのdestroyViewにFragmentPagerAdapterは破壊し、デタッチしません。と計画を添付して作成し実行するために再び戻りますときFragmentStatePagerAdapterが行うには、破壊し、デタッチ。
- したがって、シーンの小さい数、時間、空間適しFragmentPagerAdapter、シーンの多数に適用FragmentStatePagerAdapterは、それぞれのメモリ保存破壊実行します。