У меня есть TabLayout с тремя вкладками, каждая вкладка имеет свой собственный фрагмент (отводящий классы и разные защитный тип фрагментов.Как заменить фрагмент в TabLayout в Android
public Fragment getItem(int position){
switch (position){
case 0:
BooksFragment tabBooks = new BooksFragment();
return tabBooks;
case 1:
NavigationFragment tabNav = new NavigationFragment();
return tabNav;
case 2:
SearchFragment tabSearch = new SearchFragment();
return tabSearch;
default:
return null;
}
}
В tabBooks я есть таблица с книги, и когда кто-то щелкает книгу, мне нужно открыть главы. (Это работает, чтобы получить главы из веб-страницы и заполнить таблицу в фрагменте главы). Для этого у меня есть фрагмент главы.
I ' m, вероятно, делает что-то очень неправильное здесь: (В BooksFragment - onListItemClick):
fm.beginTransaction().replace(R.id.main_layout, new ChapterFragment()).commit();
фм является FragmentManager:
FragmentManager fm = getFragmentManager();
В результате я получаю фрагмент поверх всех остальных фрагментов, и он остается на вершине всего, когда я переключения вкладок.
Я знаю, что это неправильно, и таким образом я не имеют функциональные кнопки назад и кнопка назад вернется на главный экран, а не государство пред (фрагмент) я был.
I просто не могу найти решение для этого.
Im используя
FragmentPagerAdapter
Но я предполагаю, что это не проблема, проблема с
R.id.main_layout
в сообщении fm.beginTransaction или о том, что i Я использую его в FragmentManager. но я не могу найти правильный способ сделать это
Опять же, вы ищете способ изменить фрагмент в TabLayout только для конкретной вкладки.
- В этом же разделе, как мне вернуться к первому фрагменту, когда кто-то нажимает кнопку «Назад» или нажимает кнопку «Назад», которая у меня есть в моей панели инструментов (Опять же, в та же вкладка).
Я сижу на этом конкретном действии в течение 2 дней и не могу найти решение.
страница Адаптер Я использую в MainActivity (Моя единственная деятельность):
public class PageAdapter extends FragmentPagerAdapter {
int mNumOfTabs;
public PageAdapter(FragmentManager fm, int mNumOfTabs) {
super(fm);
this.mNumOfTabs = mNumOfTabs;
}
@Override
public Fragment getItem(int position){
switch (position){
case 0:
BooksFragment tabBooks = new BooksFragment();
return tabBooks;
case 1:
NavigationFragment tabNav = new NavigationFragment();
return tabNav;
case 2:
SearchFragment tabSearch = new SearchFragment();
return tabSearch;
default:
return null;
}
}
@Override
public int getCount(){
return mNumOfTabs;
}
}
Основная деятельность:
public ViewPager pager;
PagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("ספרים"));
tabLayout.addTab(tabLayout.newTab().setText(R.string.navigation_title));
tabLayout.addTab(tabLayout.newTab().setText(R.string.search_title));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
pager = (ViewPager) findViewById(R.id.pager);
adapter = new PageAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
pager.setAdapter(adapter);
pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab){
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab){}
@Override
public void onTabReselected(TabLayout.Tab tab){}
});
}
книги Фрагмент:
@Override
public void onListItemClick(ListView l, View v, int position, long id){
super.onListItemClick(l, v, position, id);
switch (displayType) {
case CATEGORIES:
Category cat = (Category) l.getItemAtPosition(position);
books = cat.getBooks();
updateDisplay(ItemType.BOOKS);
displayType = ItemType.BOOKS;
break;
case BOOKS:
Book book = (Book) l.getItemAtPosition(position);
FragmentManager fm = getFragmentManager();
fm.beginTransaction().replace(R.id.main_layout, new ChapterFragment()).commit();
break;
}
}
Thanks
Вы хотите заменить 'tabFragment' на' chapterFragment' двумя другими вкладками, все еще неповрежденными? –
Можете ли вы опубликовать свой код класса, расширяющий 'FragmentPagerAdapter', а также код, связанный с настройкой' Viewpager'. –
Я обновил все соответствующие коды, я думаю – Erez