簡體   English   中英

Android ViewPager片段生命周期

[英]Android viewpager fragment lifecyle

我在viewpager內部有一個Document fragment ,並且在應用程序的另一部分中使用了相同Document片段的實例。 我的問題是,在片段中我正在注冊一個廣播接收器,通常我在片段中正在onPause方法上取消它的注冊。 但是當我切換另一個時,片段onPause方法不會被調用。 因此, viewpager下一個片段我將使用Document片段的新實例,並且還將創建接收者的新實例。 但是onReceive方法的接收者會調用viewpager的文檔fragment方法。 因此,當查看logcat時,我可以看到我無法注銷接收器。 我如何注銷接收者,可以獲取已注冊的接收者列表?

嘗試在ViewPager的OnPageChangeListener注冊和注銷廣播接收器。 該偵聽器包含3個方法,分別是onPageScrollStateChanged(int state)onPageScrolled(int position, float positionOffset, int positionOffsetPixels)onPageSelected(int position)

使用onPageScrolledStateChanged()方法。 它使用3種狀態來監視ViewPager中的片段。 使用SCROLL_STATE_DRAGGING取消注冊您的BroadcastReceiver,使用SCROLL_STATE_SETTLING注冊您的BroadcastReceiver。

也許您可以在片段中使用setUserVisibleHint()方法...或另一個想法,在視圖分頁器上注冊OnPageChangeListener,然后從此偵聽器中手動調用方法以注銷接收者...

謝謝大家的回答,正如您所說的,我實現了OnPageChangeListener並創建了一個邏輯,它現在工作正常。 再次謝謝大家,我正在發布代碼:

   @Override
   public void onPageSelected(int position) {

       Fragment currentFragment = adapterViewPager.getRegisteredFragment(position);

       if(currentFragment.getClass()==Document.class){
           Log.i (AppConfig.TAG,"Current Fragment is Document");
           Document document = (Document)currentFragment;
           document.registerDownloadService();
       }
       if(lastFragment!=null && lastFragment.getClass()==Document.class){
           Log.i (AppConfig.TAG,"Previous Fragment is Document");
           Document document = (Document)lastFragment;
           document.unregisterDownloadService();
       }
       lastFragment = currentFragment;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM