片段内容未加载到 BottomNavigationView FragmentTransaction
Fragment content not loading on BottomNavigationView FragmentTransaction
我有一个使用 BottomNavigationView 在 Fragment 之间导航的应用程序。其中一个片段 (SearchFragment) 有一个 Tab 视图,用 EasyTabs.
实现
当我第一次导航到 SearchFragment 时,布局加载正确,所有 3 个选项卡都已填充。问题是,当我导航到另一个片段并 return 导航到 SearchFragment 时,布局不会加载。我在屏幕顶部获得选项卡视图,但未显示内容,我需要在选项卡之间导航以使它们一个接一个地显示。
onNavigationItemSelected
方法:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab_search:
mFragment = new SearchFragment();
break;
/*case R.id.tab_history:
mFragment = new RadioFragment();
break;*/
case R.id.tab_desc:
Bundle bundle = new Bundle();
bundle.putBoolean("fromSetup", false);
mFragment = new DescriptionFragment();
mFragment.setArguments(bundle);
break;
/*case R.id.tab_config:
mFragment = new RadioFragment();
break;*/
}
final FragmentTransaction transaction = mFragmentManager.beginTransaction();
transaction.replace(R.id.main_container, mFragment).addToBackStack(null).commit();
return true;
}
EasyTabsBuilder
里面 SearchFragment
:
EasyTabsBuilder.with(mTabs)
.addTabs(
new TabItem(new SearchByDateFragment(), ""),
new TabItem(new SearchByEventFragment(), ""),
new TabItem(new SearchByDescriptionFragment(), "")
)
.setTabsBackgroundColor(EasyTabsColors.White)
.setIndicatorColor(EasyTabsColors.Gray)
.setTextColors(EasyTabsColors.Black, EasyTabsColors.White)
.addIcons(
R.drawable.ic_date_range_black_24dp,
R.drawable.ic_face_black_24dp,
R.drawable.ic_description_24px)
.hideAllTitles(true)
.Build();
我在底部导航和选项卡布局方面遇到了完全相同的问题。
我找到的唯一解决方案是从片段管理器中删除您的搜索片段和 3 选项卡。您可以在 PageChangeListener
的 onPageSelected 中执行此操作
示例
@Override
public void onPageSelected(int position) {
if (position != 3 && position != 2) {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (int i = fragments.size() -1; i >= 0; i--) {
if (fragments.get(i) != null) {
if (fragments.get(i).getClass() == OrderInProgressFragment.class ||
fragments.get(i).getClass() == OrderFinishFragment.class ||
fragments.get(i).getClass() == OrderFragment.class) {
getSupportFragmentManager().beginTransaction().remove(fragments.get(i)).commit();
getSupportFragmentManager().executePendingTransactions();
}
}
}
}
bottomNavigationView.getMenu().getItem(position).setChecked(true);
}
我的 bottomNavigation 上有 4 个页面,我要删除的片段位于第 3 个位置。所以 if 用于检查我当前是否正在使用我的片段,或者我是否在前一个选项卡上,如果不是,我删除包含选项卡的 OrderFragment 和其中的另外两个选项卡
我有一个使用 BottomNavigationView 在 Fragment 之间导航的应用程序。其中一个片段 (SearchFragment) 有一个 Tab 视图,用 EasyTabs.
实现当我第一次导航到 SearchFragment 时,布局加载正确,所有 3 个选项卡都已填充。问题是,当我导航到另一个片段并 return 导航到 SearchFragment 时,布局不会加载。我在屏幕顶部获得选项卡视图,但未显示内容,我需要在选项卡之间导航以使它们一个接一个地显示。
onNavigationItemSelected
方法:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab_search:
mFragment = new SearchFragment();
break;
/*case R.id.tab_history:
mFragment = new RadioFragment();
break;*/
case R.id.tab_desc:
Bundle bundle = new Bundle();
bundle.putBoolean("fromSetup", false);
mFragment = new DescriptionFragment();
mFragment.setArguments(bundle);
break;
/*case R.id.tab_config:
mFragment = new RadioFragment();
break;*/
}
final FragmentTransaction transaction = mFragmentManager.beginTransaction();
transaction.replace(R.id.main_container, mFragment).addToBackStack(null).commit();
return true;
}
EasyTabsBuilder
里面 SearchFragment
:
EasyTabsBuilder.with(mTabs)
.addTabs(
new TabItem(new SearchByDateFragment(), ""),
new TabItem(new SearchByEventFragment(), ""),
new TabItem(new SearchByDescriptionFragment(), "")
)
.setTabsBackgroundColor(EasyTabsColors.White)
.setIndicatorColor(EasyTabsColors.Gray)
.setTextColors(EasyTabsColors.Black, EasyTabsColors.White)
.addIcons(
R.drawable.ic_date_range_black_24dp,
R.drawable.ic_face_black_24dp,
R.drawable.ic_description_24px)
.hideAllTitles(true)
.Build();
我在底部导航和选项卡布局方面遇到了完全相同的问题。
我找到的唯一解决方案是从片段管理器中删除您的搜索片段和 3 选项卡。您可以在 PageChangeListener
的 onPageSelected 中执行此操作示例
@Override
public void onPageSelected(int position) {
if (position != 3 && position != 2) {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (int i = fragments.size() -1; i >= 0; i--) {
if (fragments.get(i) != null) {
if (fragments.get(i).getClass() == OrderInProgressFragment.class ||
fragments.get(i).getClass() == OrderFinishFragment.class ||
fragments.get(i).getClass() == OrderFragment.class) {
getSupportFragmentManager().beginTransaction().remove(fragments.get(i)).commit();
getSupportFragmentManager().executePendingTransactions();
}
}
}
}
bottomNavigationView.getMenu().getItem(position).setChecked(true);
}
我的 bottomNavigation 上有 4 个页面,我要删除的片段位于第 3 个位置。所以 if 用于检查我当前是否正在使用我的片段,或者我是否在前一个选项卡上,如果不是,我删除包含选项卡的 OrderFragment 和其中的另外两个选项卡