Фрагменты отображаются друг на друге. Может быть, я сделал что-то не так с ViewpagerAdapter y fragment контейнер
Проблема у меня в том, что фрагменты были отображены друг на другe.
Я создал HomeBNVFragment выступать в качестве контейнера для трех вкладок и их соответствующих фрагментов, которые у меня есть в TabLayout (Home, World и Messages). Но почему-то они показаны за HomeBNVFragment у меня в моем BottomNavigationView.
Я даже не знаю, как это возможно, так как это "контейнер", так что в теории он должен отображать информацию о любой вкладке, которая находится внутри него в это конкретное время ... Может быть, кто-то может сказать мне, где ошибка в моем коде?
Ниже у вас есть моя MainActivity, HomeBNVFragment и HomeTabLayoutФрагмент.
MainActivity.java
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.nav_home:
mSelectedFragment = new HomeBNVFragment();
break;
case R.id.nav_search:
mSelectedFragment = new SearchFragment();
break;
case R.id.nav_notifications:
mSelectedFragment = new NotificationsFragment();
break;
case R.id.nav_profile:
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("profileid", FirebaseAuth.getInstance().getCurrentUser().getUid());
editor.apply();
mSelectedFragment = new ProfileFragment();
break;
case R.id.nav_save:
mSelectedFragment = new SaveFragment();
break;
}
if (mSelectedFragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mSelectedFragment).commit();
}
return true;
}
};
HomeBNVFragment (контейнер)
public class HomeBNVFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home_bnv, container, false);
setFragment(new HomeTabLayoutFragment());
return v;
}
private void setFragment(Fragment fragment) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, fragment);
ft.commit();
}
}
HomeTabLayoutFragment (
public class HomeTabLayoutFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home_tab_layout, container, false);
RecyclerView recyclerView = v.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
mPostLists = new ArrayList<>();
mPostAdapter = new PostAdapter(getContext(), mPostLists);
recyclerView.setAdapter(mPostAdapter);
TabLayout tabLayout = v.findViewById(R.id.tab_layout);
final ViewPager viewPager = v.findViewById(R.id.viewpager);
if (getFragmentManager() != null) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
viewPagerAdapter.addFragment(new HomeTabLayoutFragment(), "Home");
viewPagerAdapter.addFragment(new WorldFragment(), "World");
viewPagerAdapter.addFragment(new MessagesFragment(), "Messages");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
return v;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof Activity) {
mActivity = (Activity) context;
}
}
static class ViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> mFragments;
private ArrayList<String> mTitles;
ViewPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
this.mFragments = new ArrayList<>();
this.mTitles = new ArrayList<>();
}
@NonNull
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
void addFragment(Fragment fragment, String title) {
mFragments.add(fragment);
mTitles.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mTitles.get(position);
}
}
}