2016-06-11 1 views
0

Я пытаюсь создать программу с TabLayout и меню параметров, которое при выборе может добавить или удалить вкладку вместе с фрагментом. Я могу удалить вкладку, но я не могу понять, что еще нужно сделать, потому что мне нужно удалить фрагменты, которые удерживает вкладка, более того, мне также может потребоваться изменить положение фрагментов, которые я просто не могу представить выяснить. Не могли бы вы мне помочь?Как удалить вкладку и связанный с ней фрагмент из TabLayout & FragmentStatePagerAdapter

под mainAcitivity это, как я добавить вкладки

tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

     tab1= tabLayout.newTab().setText("TAB 1"); 
     tabLayout.addTab(tab1); 

     tab2 = tabLayout.newTab().setText("TAB 2"); 
     tabLayout.addTab(tabKantipur); 

Это FragmentstatePagerAdapter

public class TabPagerAdapter extends FragmentStatePagerAdapter { 

    int tabCount; 

    public TabPagerAdapter(FragmentManager fm, int numberOfTabs) { 
     super(fm); 
     this.tabCount = numberOfTabs; 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return NewsFragment.newInstance("data for fragment 1"); 
      case 1: 
       return NewsFragment.newInstance("data for fragment 2"); 
      default: 
       return null; 
     } 

    } 

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

В основном здесь NewsFragment является фрагментом которого новый экземпляр используется в закладках. Под onActivityResult я получаю данные, которые были запрошены из меню опций, чтобы добавить или удалить fragmetns

mpagerAdapter = new TabPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
removedTab = ..data received from ooption menu 
// here I want to remove the Tab & the fragments (tab1 & its fragment) 


if (removeTab == "tab1") { 
    tabLayout.removeTab(tab1); 
    mpagerAdapter.notifyDataSetChanged(); 
} 

} 

Как я делаю это только первая вкладка получает удалена я хотел бы знать, как удалить соответствующий фрагмент тоже.

+0

Вы хотите сделать это на этом же шаге? Не уверен, но вы всегда можете программно удалить фрагмент. http://stackoverflow.com/questions/22474584/remove-old-fragment-from-fragment-manager –

+0

Кроме того, 'removeTab ==" tab1 "' не так, как вы сравниваете строки в Java –

+0

Да, я хочу сделать это в тот же шаг, который я провел недели, по-прежнему не может этого сделать. Все учебники рассказывают об установке тега для фрагмента, но, как вы видите, у меня нет тега в моем фрагменте. – choman

ответ

0

Вам не нужно явно удалять фрагмент, вы можете удалить фрагмент.

Вы можете удалить вкладку и уведомить DataSetChanged о экземпляре viewPagerAdapter. Он позаботится об удалении фрагмента.

+0

Я уже использую его, но он не удаляет фрагмент. проверьте код выше. mpagerAdapter.notifyDataSetChanged(); – choman

+0

вам также необходимо изменить переменную tabCount, а затем do notifyDataSetChangesd(). – Ritesh

Смежные вопросы