0

我已經構建了左側導航欄的應用程序,其主要內容是ViewPager當計數相同時,您如何通知PagerAdapter碎片已更改?

ViewPager在兩個不同視圖之間滑動。

當用戶從導航欄中選擇一些內容時,我會向ViewPager的適配器發送一條消息(我試過FragmentPagerAdapter和FragmentStatePagerAdapter,但都不起作用),它設置一個內部變量並調用notifyDatasetChanged();

問題是getCount()方法總是返回2,所以當適配器檢查數據集是否發生了變化時,它會發現這些項仍然是2,並且不會繼續調用getItem(position)。

getItem(position)根據在notifyDatasetChanged()之前設置的內部變量的值返回不同的片段。

我試着覆蓋getItemId(位置)的情況下,尋呼機檢查ID,但它似乎沒有檢查計數後打擾。

有沒有辦法在調用notifyDatasetChanged()時強制適配器重新生成碎片?

預先感謝任何幫助,您可以提供

編輯:這裏是我目前使用的代碼:

public class ContentAdapter extends FragmentPagerAdapter { 

    private ViewedSection _section = ViewedSection.Main; 

    public ContentAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int position) { 
     ViewedScreen screen = get_screen(position); 
     return screen == null ? null : FragmentFactory.GetFragment(get_screen(position)); 
} 

    @Override 
    public int getCount() { 
     return 2; 
    } 

    private ViewedScreen get_screen(int position) { 
    //code to resolve which screen will be shown according to the current position and _section 
    } 

    public void set_page(ViewedSection section) { 
     this._section = section; 
     notifyDataSetChanged(); 
    } 
} 

因此,當用戶點擊的NavBar項目,我打電話((ContentAdapter 。)_pager.getAdapter())set_page(部);

+0

當您選擇相應的導航抽屜項目時,您是否希望'ViewPager'在兩個視圖之間切換,或更改'PagerAdapter'中添加的'Fragment',因此它應該更新並顯示新的'Fragment'? –

+0

你可以發佈一些代碼,所以我可以更好地理解這個問題? –

+0

我想要做的是讓導航欄中的每個菜單項加載兩個不同的片段(viewpager將顯示),例如有一個名爲main的菜單項,它將顯示MenuFragment和SettingsFragment,當菜單項呼叫被選中,尋呼機應該在PlayFragment和ListFragment的片段之間切換 – Cruces

回答

2

對於這一點,你需要重寫

public int getItemPosition (Object object) 

返回POSITION_UNCHANGED如果你不想更換片段。如果要替換片段,請返回POSITION_NONE。 (另外,還可以返回一個新的位置,片段移動到。)

常見的倍率

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

這將只是重建一切。

相關問題