9

我想用實現嚮導材料設計支持庫在不更改選定選項卡的情況下動態更新TabLayout

我使用的是ViewPagerTablayout,但是我在動態添加新選項卡時遇到問題。

首先,我建立了我的小部件onCreate方法:

viewPager = (ViewPager) findViewById(R.id.tab_viewpager); 
tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFrag(new DummyFragment(), "1"); 
adapter.addFrag(new DummyFragment(), "2"); 
viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 

然後我要添加另一張卡,單擊列表中的一個元素時:

adapter.addFrag(new DummyFragment(), "3"); 
adapter.notifyDataSetChanged(); 
tabLayout.setTabsFromPagerAdapter(adapter); 

的問題是:添加之後,選定的卡首先重置。

如何防止這種行爲?

回答

0

剛跑了同樣的問題,幸運的是找到了解決方案(不是一個漂亮的一個,但它的工作原理):

當你需要更新標籤:

pageradapter.notifyDataSetChanged(); 
for (int i = 0; i < viewpager.getCount(); i++) { 
    sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); 
} 
0

這是一個輕微的修改到@Kalpit代碼。 你必須動態地將這個新標籤添加到我們的佈局,並通過調用tablayout調用的適配器的相同方法來分配標題,當你使用setupWithViewPager方法時。所以我使用這個try catch語句來創建尚未創建的標籤但是,你可能會嘗試給他們分配一些標題。

adapter.notifyDataSetChanged(); 
    for(int i = 0;i<adapter.getCount();i++){ 
     try{ 
     tablayout.getTabAt(i).setText(adapter.getPageTitle(i)); 
     } 
     catch(IndexOutOfBoundException e){ 
     tablayout.addTab(tablayout.newTab().setText(adapter.getPageTitle(i)); 
     } 
    } 
相關問題