断片ライフサイクル管理のViewPager +フラグメントを達成

スライド効果と組み合わさ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: 

結論

  1. ViewPagerのデフォルトは3の合計で現在のページと2つのフロントとリアの内容を、維持します。ホームではないので、現在のページと次のページを離れる前に、
  2. 保持されていないコンテンツの場合、断片のみのdestroyViewにFragmentPagerAdapterは破壊し、デタッチしません。と計画を添付して作成し実行するために再び戻りますときFragmentStatePagerAdapterが行うには、破壊し、デタッチ。
  3. したがって、シーンの小さい数、時間、空間適しFragmentPagerAdapter、シーンの多数に適用FragmentStatePagerAdapterは、それぞれのメモリ保存破壊実行します。

おすすめ

転載: www.cnblogs.com/pravez/p/12604355.html