Android復習-fragment宣言サイクルとActivityライフサイクル(個人メモ)

4945 ワード

Fragmentライフサイクル(メモ):
onAttach 
onCreate
onCreateView:
onViewCreated
onStart
onReume:
onPause:
onStop
onDestoryView
onDestory
onDetch
fragmentのライフサイクルはActivityにバインドされていますが、統一的には言えません.例えば、fragmentManagerでActivityのfragmentに動的に追加されます.宣言サイクルは、作成されたライフサイクルについてはactivityが先に実行し、fragmentが後に実行し、破棄と一時停止のライフサイクルについてはfragmentが先に実行し、activityが後に実行します.ただし、activityがxmlファイルで宣言したfragmentラベルであれば、作成したfragmentについては先に実行し、activity後に実行し、表示(onResume)についてはactivity先に実行し、fragment後に実行し、破棄を一時停止した場合はfragment先に実行し、activity後に実行する.
fragmentには、怠け者のロードに必要な重要な方法があります.
setuUserVisiableHint(boolean isVisiableToUser):このメソッドはfragmentManagerでfragmentを追加する場合、fragmentがユーザーに表示されるときにコールバックする必要があるメソッドで、このメソッドはコールバックされ、
isVisiableToUserはtrueで、表示されない場合はfalseにコールバックします.
tablayout+viewpager+fragmentで怠惰なロードを実現する場合:setuserVisiableHint+onView Created+onDestoryView+isInitialData変数によりloadDataを決定する.
public class TestFragment extends Fragment {

    public static final String PAGE_INDEX = "page_index";
    private int page = -1;
    private TextView textView;

    private boolean isVisibleToUser;
    private boolean isViewCreated;
    private boolean isInitialData;

    private int params = -2;
    public static TestFragment newInstance(int position) {
        
        Bundle args = new Bundle();
        args.putInt(PAGE_INDEX,position);
        TestFragment fragment = new TestFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisibleToUser = isVisibleToUser;
        loadData();
        Log.i("mydata",page + "----setUserVisibleHint :" + isVisibleToUser);
    }

    private void loadData() {
//        Log.i("mydata",page + " : loadadata-->" + "--isVisibleToUser--" + isVisibleToUser + "--isViewCreated--" + isViewCreated + "--isInitialData--" + isInitialData);
        if(isVisibleToUser && isViewCreated && !isInitialData){
            Log.i("mydata",page + "     ");
            isInitialData = true;
            params = new Random().nextInt(10);
            textView.setText(textView.getText() + " : " + params);
        }
    }

    @Override
    public void onAttach(Context context) {
        page = getArguments().getInt(PAGE_INDEX);
        Log.i("mydata",page + "----onAttach");
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("mydata",page + "----onCreate");
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.i("mydata",page + "----onCreateView");
        return inflater.inflate(R.layout.fragment_layout,null);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.i("mydata",page + "----onViewCreated");
        this.isViewCreated = true;
        textView = (TextView) view.findViewById(R.id.tv_fragment);
        textView.setText("index :" + page);
        loadData();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i("mydata",page + "----onActivityCreated");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.i("mydata",page + "----onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.i("mydata",page + "----onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.i("mydata",page + "----onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.i("mydata",page + "----onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        //      ,    onDestroyView    ,        fragment         onViewCreated  ,  isViewCreated = true     。。
        isViewCreated = false;
        Log.i("mydata",page + "----onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //  fragment list   ,       onDestroy ,fragment         ,  isInitialData    true,                
        isInitialData = false;
        Log.i("mydata",page + "----onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.i("mydata",page + "----onDetach");
    }
}