2015-10-15 2 views
4

Я использую PagerSlidingTabStrip, чтобы показать 3 вкладки, каждая из которых содержит в себе просмотр списка.PagerSlidingTabStrip - добавить новую вкладку во время выполнения

У меня есть сценарий, когда мне нужно добавить новую вкладку во время выполнения, скажем, при прокрутке, чтобы обновить. Мне нужно добавить новую вкладку в левый конец.

Ниже мой код, чтобы добавить новую вкладку:

pagerAdapter.TABS_COUNT = 4; //global value to change the tabs count 
pagerAdapter.notifyDataSetChanged(); 
pagerSlidingTabStrip.setViewPager(mPager); 

но несколько раз один из содержания вкладок становится пустым ListView не является прокручивать.

Каков наилучший способ достижения этого?

+0

Возможно, у вас есть проблемы с вашим пейджером-адаптером. – tachyonflux

+0

Почему бы вам не использовать фрагмент пейджера-адаптера + фрагмент внутри пейджера представления, который поможет вам добавить фрагмент для запуска времени в представлении пейджера. – dex

+0

@ user2056563 можете ли вы разместить более релевантный код? –

ответ

0

Вот пример того, как сделать это, не сказать, что это лучший способ, но я написал его в спешке https://github.com/jacktech24/pager-sliding-strip-example

Во-первых, вам нужен собственный адаптер, здесь я использовал простой тот, который отображает только текст на каждом фрагменте, но было бы легко изменить его, чтобы поддерживать нормальные фрагменты и т.д. mTabs в примере:

mTabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 

то пример

private class TestAdapter extends FragmentPagerAdapter { 

     private ArrayList<String> tabs = new ArrayList<>(); 

     public TestAdapter(FragmentManager supportFragmentManager) { 
      super(supportFragmentManager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Fragment frag = new ExampleFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putString("title", (String) getPageTitle(position)); 
      frag.setArguments(bundle); 
      return frag; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return tabs.get(position); 
     } 

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

     public void addTab(String tab) { 
      tabs.add(tab); 
      notifyDataSetChanged(); 
      mTabs.notifyDataSetChanged(); 
     } 

     public void removeTab(int position) { 
      tabs.remove(position); 
      notifyDataSetChanged(); 
      mTabs.notifyDataSetChanged(); 
     } 

    } 

, то это так просто:

//mAdapter is instance of your adapter 
    mAdapter.addTab("test 1"); 
    mAdapter.addTab("test 2"); 
    mAdapter.addTab("test 3"); 


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mAdapter.addTab("test "+(mAdapter.getCount()+1)); 
     } 
    }); 
Смежные вопросы