Fragment和Activity之間的通信

        在Activity中調用Fragment中的方法:

       

     LeftFragment leftFragment = (LeftFragment)getSupportFragmentManager().findFragmentById(R.id.left_fragment)
         我們調用FragmentManager的findFragmentById()方法,就可以在我們的Activity裏得到相應碎片的實例,然後就能輕鬆的調用碎片裏面的方法,傳遞參數了

     在Fragment裏調用Activity裏的方法:

      

     MainActivity activity = (MainActivity)getActivity();
     是不是很簡單,這個時候也許你會問fragment和fragment之間可不可以通信?我可以肯定的告訴你,當然可以。

     首先在一個fragment中可以得到與它相關聯的activity,然後再通過這個活動去獲取另外一個fragment的實例。就這麼簡單。

      最後我講一下Fragment中大家很容易忽略, 但是對用戶體驗很有用處的方法:addToBackStack();

 

      FragmentManager fragmentManager = getSupportFragmentManager();
      FragmentTransaction transaction = fragmentManager.beginTransaction();
      transaction.replace(R.id.right_layout,fragment);
      transaction.addToBackStack(null);
      transaction.commit();
       這個方法的參數 一般傳入null即可。這個方法被調用,意味着將這個fragment加入了一個返回棧,比如一個activity裏面需要很多個fragment,根據點擊按鈕的不同展示不同的fragment ,如果不加這句代碼,當你點擊back的時候直接退出程序,如果加了,那麼點擊back鍵則會返回上一個展示的fragment,直到這個返回棧清空,沒有事務,纔會退出程序。

      我們都知道fragment的生命週期是onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->onpause()->onStop()->onDestroyView()->onDestory()->onDetach()

如果我們加入addToBackStack();那麼我們在切換fragment的時候,上一個fragment則會進行onPause->onStop()->onDestoryView(),如果沒有加入這個方法,那麼上一個fragment進入銷燬狀態,onDestory()->onDetach()都會執行;如果我們點擊Back鍵返回到上一個fragment,則會從onDestoryView()回到onCreateView()->onActivityCreated()->onStart()->onResume(),但是oncreate()並不會執行,因爲我們藉助了addToBackStack()使得上一個fragment沒有被銷燬。


      今天就總結到這裏吧,有相關問題請給我留言,我們一起探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章