片段内容未在 BottomNavigationView FragmentTransaction 上加载

Posted

技术标签:

【中文标题】片段内容未在 BottomNavigationView FragmentTransaction 上加载【英文标题】:Fragment content not loading on BottomNavigationView FragmentTransaction 【发布时间】:2018-02-13 22:26:34 【问题描述】:

我有一个使用 BottomNavigationView 在片段之间导航的应用程序。其中一个片段 (SearchFragment) 有一个 Tab 视图,使用 EasyTabs 实现。

当我第一次导航到 SearchFragment 时,布局正确加载,所有 3 个选项卡都已填充。问题是当我导航到另一个片段并返回 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;

EasyTabsBuilderSearchFragment:

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();

【问题讨论】:

【参考方案1】:

我在底部导航和标签布局方面遇到了完全相同的问题。

我找到的唯一解决方案是从片段管理器中删除您的搜索片段和 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);
        

我的底部导航有 4 页,要删除的片段位于 3 位置。所以 if 用于检查我当前是否正在使用我的片段,或者我是否在上一个选项卡上,如果不是,我删除包含选项卡的 OrderFragment 和其中的另外两个选项卡

【讨论】:

这个方法对我不起作用,但我用了你的想法!在SearchFragmentonDestroyView方法上,我删除了所有与SearchFragment相关的Fragment。

以上是关于片段内容未在 BottomNavigationView FragmentTransaction 上加载的主要内容,如果未能解决你的问题,请参考以下文章

动态 TextView 未在片段中更新

片段未在后退按钮上打开上一个片段

onActivityResult() 未在新的嵌套片段 API 中调用

片段未在后台堆栈中注册

onActivityResult 未在 Android API 23 的片段上调用

OnActivityResult未在活动的片段中调用