2

我指的是link for swipeable tabs using fragments。它適用於我,但如果我需要動態添加選項卡數量而不預先指定選項卡數量呢?舉例來說,我的一些邏輯給了我有時在anarray的2個字符串中輸出,有時在數組中的4個字符串。根據邏輯,我需要在運行時在操作欄中設置選項卡的數量。我怎樣才能做到這一點?任何人都可以告訴我如何實現我所需要的?如何在運行時動態設置動作欄中帶有碎片的可滑動選項卡的數量

回答

4

STEP 1:

定義你的TabsPagerAdapter如下:

public class TabsPagerAdapter extends FragmentPagerAdapter { 

    private ArrayList<Fragment> list; 

    public TabsPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) { 
     super(fm); 
     this.list = list; 
    } 

    @Override 
    public Fragment getItem(int index) { 
     return list.get(index); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

} 

STEP 2:

當你在運行時確定的選項卡的數量,首先要確保創建所需數量爲Fragment s的List

ArrayList<Fragment> list = new ArrayList<Fragment>(); 
for(int i = 0; i < tabcount; i++){ 
    list.add(MyFragment.newInstance()); 
} 

OR

ArrayList<Fragment> list = new ArrayList<Fragment>(); 
list.add(new GamesFragment()); 
list.add(new TopRatedFragment()); 
list.add(new MoviesFragment()); 

STEP 3:

當您創建爲ViewPagerAdapter,通過您可以使用做的ArrayList在構造函數TabsPagerAdapter中爲210秒:

TabsPagerAdapter adapter = new TabsPagerAdapter(fm, list); 

試試這個。這將工作。

+0

MyFragment在for循環中代表什麼?它是我的MainActivity片段還是別的嗎? – 2015-02-26 09:29:16

+1

'MyFragment'是'ViewPager'所擁有的'Frament'的類...在這個例子中,你已經鏈接了'ViewPager'中的'Fragment'是'GamesFragment','TopRatedFragment'等。你能理解這個嗎? – 2015-02-26 09:41:37

+0

那麼保持我的ViewPager的片段是MainActivity按照擴展FragmentActivity類的例子。如果我在代碼中給MainActivity代替了MyFragment,它會在newInstance()下面給我提供錯誤,並說未爲MainActivity定義newInstance()方法。作爲一名新手,你能不能更多地表達自己的意見? – 2015-02-26 09:49:09

2

在你Adapter化妝方法addTab,是這樣的:

private final ArrayList<TabInfo> tabs = new ArrayList<TabInfo>(); 

public void addTab(String tabName, Class<?> clss, Bundle args) 
{ 
    TabInfo info = new TabInfo(clss, tabName); 
    tabs.add(info); 
    notifyDataSetChanged(); 
} 

... ... 

static final class TabInfo 
{ 
    private final Class<?> clss; 
    private final String title; 

    TabInfo(Class<?> _class, String _title) 
    { 
     clss = _class; 
     title = _title; 
    } 

和你的方法getCount

@Override 
public int getCount(){ 
    return tabs.size(); 
} 

所有的碎片/標籤應該由addTab添加:

mAdapter.addTab(getResources().getString(R.string.tab_name), YourFragment.class, null); 
+0

YourFragment.class代表什麼?它是否是我的MainActivity,它擴展了FragmentActivity或其他東西? – 2015-02-26 09:37:02

+1

每個標籤對應一個片段,對嗎?所以當你添加一個標籤時,自然也要添加一個片段 – Xcihnegn 2015-02-26 10:07:05

相關問題