天天看點

activity調用fragment的方法_Fragment三問—B站真題

Fragment作為Android最基本,最重要的基礎概念之一,也是Activity的好搭檔,在開發中經常會和他打交道。今天的三問就說關于Fragment:

  • Fragment生命周期,當hide,show,replace時候生命周期變化。
  • Activity 與 Fragment,Fragment 與 Fragment之間怎麼互動通信。
  • Fragment遇到viewpager遇到過什麼問題嗎。

Fragment生命周期,當hide,show,replace時候生命周期變化

1)生命周期:

  • onAttach()

    :Fragment和Activity相關聯時調用。可以通過該方法擷取Activity引用,還可以通過getArguments()擷取參數。
  • onCreate()

    :Fragment被建立時調用。
  • onCreateView()

    :建立Fragment的布局。
  • onActivityCreated()

    :當Activity完成onCreate()時調用。
  • onStart()

    :當Fragment可見時調用。
  • onResume()

    :當Fragment可見且可互動時調用。
  • onPause()

    :當Fragment不可互動但可見時調用。
  • onStop()

    :當Fragment不可見時調用。
  • onDestroyView()

    :當Fragment的UI從視圖結構中移除時調用。
  • onDestroy()

    :銷毀Fragment時調用。
  • onDetach()

    :當Fragment和Activity解除關聯時調用。

每個調用方法對應的生命周期變化:

  • add()

    : onAttach()->…->onResume()。
  • remove()

    : onPause()->…->onDetach()。
  • replace()

    : 相當于舊Fragment調用remove(),新Fragment調用add()。remove()+add()的生命周期加起來
  • show()

    : 不調用任何生命周期方法,調用該方法的前提是要顯示的 Fragment已經被添加到容器,隻是純粹把Fragment UI的setVisibility為true。
  • hide()

    : 不調用任何生命周期方法,調用該方法的前提是要顯示的Fragment已經被添加到容器,隻是純粹把Fragment UI的setVisibility為false。

Activity 與 Fragment,Fragment 與 Fragment之間怎麼互動通信。

  • Activity 與 Fragment通信

Activity有Fragment的執行個體,是以可以執行Fragment的方法,或者傳入一個接口。同樣,Fragment可以通過

getActivity()

擷取Activity的執行個體,也是可以執行方法。

  • Fragment 與 Fragment之間通信

1)直接擷取另一個Fragmetn的執行個體

getActivity().getSupportFragmentManager().findFragmentByTag("mainFragment");
           

2)接口回調 一個Fragment裡面去實作接口,另一個Fragment把接口執行個體傳進去。

3)Eventbus等架構。

Fragment遇到viewpager遇到過什麼問題嗎。

  • 滑動的時候,調用setCurrentItem方法,要注意第二個參數

    smoothScroll

    。傳false,就是直接跳到fragment,傳true,就是平滑過去。一般首頁切換頁面都是用false。
  • 禁止預加載的話,調用

    setOffscreenPageLimit(0)

    是無效的,因為方法裡面會判斷是否小于1。需要重寫

    setUserVisibleHint

    方法,判斷fragment是否可見。
  • 不要使用

    getActivity()

    擷取activity執行個體,容易造成空指針,因為如果fragment已經onDetach()了,那麼就會報空指針。是以要在

    onAttach

    方法裡面,就去擷取activity的上下文。
  • FragmentStatePagerAdapter

    對limit外的Fragment銷毀,生命周期為onPause->onStop->onDestoryView->onDestory->onDetach, onAttach->onCreate->onCreateView->onStart->onResume。也就是說切換fragment的時候有可能會多次

    onCreateView

    ,是以需要注意處理資料。
  • 由于可能多次

    onCreateView

    ,是以我們可以把view儲存起來,如果為空再去初始化資料。見代碼:
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (null == mFragmentView) {
                mFragmentView = inflater.inflate(getContentViewLayoutID(), null);
                ButterKnife.bind(this, mFragmentView);
                isDestory = false;
                initViewsAndEvents();
            }
        return mFragmentView;
    }
           

Android開發者們,快來關注公衆号【碼上積木】,每天三問面試題,并詳細剖析,助你成為offer收割機。

積累也是一種力量。

activity調用fragment的方法_Fragment三問—B站真題

點點在看你最好看

activity調用fragment的方法_Fragment三問—B站真題
activity調用fragment的方法_Fragment三問—B站真題

繼續閱讀