2016-08-10 139 views
1

後不會刷新我有,我可以在我的導航欄與開片段的列表:ViewPager更換片段

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment).commit(); 

片段都來自同一類型 - >CDMBasicMovieFragment extends Fragment

這裏面片段我有一個viewpager,我打電話給getFragmentManager()。在這裏,我有這個問題。第一個片段很好,但在替換第一個片段後,viewpager爲空。然後我將getFragmentManager()更改爲getChildFragmentManager()。現在所有的碎片都很好。但只有一次。替換回第一個片段後,我有同樣的問題。我究竟做錯了什麼?

EDIT1:

我的視圖層次:

  • 活動

    • CDMBasicMovieFragment 1
      • ViewPager
        • CDMMovieListFragment
    • CDMBasicMovieFragment 2
      • ViewPager
        • CDMMovieListFragment
    • CDMBasicMovieFragment 3
      • ViewPager
        • CDMMovieListFragment

EDIT2:

我試圖創建的片段唯一的id並用它們替代上,但我已經有同樣的問題:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment, uniqueFragmentTag).commit(); 

EDIT3:

我發現了一個可能的解決方案: OnCreateView called multiple times/Working with ActionBar and Fragments 我什麼都試過從這個鏈接。我已經有同樣的問題......任何人都可以幫忙嗎?

UPDATE:

一個密集的調試會話後,)我發現這一點:

當裝載第一CDMMovieListFragment FragmentPagerAdapter的instantiateItem被調用,並檢查是否已經有一個片段。這不是這就是爲什麼它在內部調用

mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));

當我更換CDMBasicMovieFragment其中包括fragmentpageradapter(裏面是加CDMMovieListFragment),並嘗試加載第二CDMBasicMovieFragment那麼它仍然是相同的fragmentmanager。

FragmentPagerAdapter的instantiateItem被調用並找到舊的CDMMovieListFragment。現在它改爲mCurTransaction.attach(fragment);。我認爲這是問題。但是我很困惑...下面的代碼片段

+0

這與您的情況有關嗎? mViewPager =(ViewPager)findViewById(R.id.pager); //必須設置OffscreenPageLimit,因爲默認值爲1,我們有3個選項卡。如果在裝載機完成時沒有關閉屏幕,則會崩潰,否則會崩潰。 mViewPager.setOffscreenPageLimit(2); – usajnf

+0

我不想更改viewpager內的片段。我想替換包含viewpager的片段。檢查我的編輯。我添加了我的視圖層次。 – beeb

+0

我明白了。這有點複雜。 – usajnf

回答

1

我解決我的問題。

現在我經常更換CDMBasicMovieFragment這樣的:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, CDMBasicMovieFragment.newInstance()).commit(); 

在調用FragmentPagerAdapter的構造函數,我改變getFragmentManagergetChildFragmentManager

我以爲我可以創建所有片段一次,只需要替換它們,如果我點擊導航欄(抽屜)的項目。但replace將刪除一次創建的片段,當我想要再次替換已刪除的片段時,它不在那裏。這就是爲什麼我有一個空白的viewpager。

0

嘗試,在您的自定義傳呼機適配器:

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

然後在含有ViewPager你的活動:

final MyPagerAdapter adapter = new MyPagerAdapter(); 
pager.setAdapter(adapter); 
pager.setOnPageChangeListener(new OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
      ... anything you may need to do to handle pager state ... 
      adapter.notifyDataSetChanged(); //this line will force all pages to be loaded fresh when changing between fragments 
    } 
} 
+0

沒有改變......同樣的問題 – beeb