0

我有一個文件fragment它在viewpager裏面,我在應用程序的另一部分中使用相同的Document fragment的實例。我的問題是,在片段我正在註冊一個廣播接收器,通常我正在取消它的方法在片段中的註冊。但是當我切換另一個時,不會調用片段方法。所以下一個片段viewpager我使用Document fragment的新實例,並且我也創建了接收器的新實例。但onReceive方法接收器調用viewpager的文件fragment方法。所以當看看logcat時,我可以看到我無法註銷接收者。我如何取消註冊接收者,我可以獲得已註冊的接收者列表嗎?Android viewpager fragment lifecyle

+0

您使用哪種適配器來擴展ViewPager中的片段? –

+0

我正在使用FragmentStatePagerAdapter,在getItemMethod我創建像Document.newInstance();按位置 – Hmm

+0

我已在下面發佈答案。請看看。如果您仍然有任何疑問,請隨時詢問。 –

回答

0

嘗試在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。

0

也許你可以在你的片段使用setUserVisibleHint()方法...或者其他的想法,註冊OnPageChangeListener對你的看法尋呼機從這個監聽器可以manualy調用方法註銷您的reciever ...

0

謝謝所有爲您的答案,正如你所說我實施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; 
    } 
相關問題