底部导航视图 - 替换 Fragments 真的很慢

Pat*_*ric 5 performance android android-fragments bottomnavigationview

我有一个底部导航视图的设置。我加载的 3 个片段之一有一个带有另外 3 个片段的标签栏。我确实在底部导航点击时替换了这样的片段:

    private void loadPage(int page)
    {

    if(fragmentManager == null)
        fragmentManager = getSupportFragmentManager();
    final FragmentTransaction transaction = fragmentManager.beginTransaction();
    //transaction.setCustomAnimations(R.anim.fragment_fade_in, R.anim.fragment_fade_out, R.anim.fragment_fade_in, R.anim.fragment_fade_out);
    //transaction.setCustomAnimations(R.anim.fragment_fade_in, R.anim.fragment_fade_out, R.anim.fragment_fade_in, R.anim.fragment_fade_out);

    switch (page)
    {
        //Property
        case TAB_PROPERTIES:

            Fragment fragment = fragmentManager.findFragmentByTag("property");
            if(fragment == null)
                fragment = PropertyFragment.newInstance();
            transaction.replace(R.id.rlMainContent, fragment,"property").addToBackStack("property").commit();
            break;
        //jobs
        case TAB_JOBS:
            fragment = fragmentManager.findFragmentByTag("jobs");
            if(fragment == null)
                fragment = JobsFragment.newInstance(null);
            transaction.replace(R.id.rlMainContent, fragment,"jobs").addToBackStack("jobs").commit();
            break;
        //contacts
        case TAB_CONTACTS:
            fragment = fragmentManager.findFragmentByTag("contacts");
            if(fragment == null)
                fragment = PersonalContactsFragment.newInstance(false,true,false,true);

            transaction.replace(R.id.rlMainContent, fragment,"contacts").addToBackStack("contacts").commit();

            break;
    }



}
Run Code Online (Sandbox Code Playgroud)

这些片段正确地从后台堆栈中检索出来,然后调用 onCreateView 和 onStart。

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.activities_fragment, container, false);
    mEmptyView = view.findViewById(R.id.empty_view);
    mRecyclerView = (EmptyRecyclerView) view.findViewById(R.id.recycler_view);
    mSwipeContainer = (SwipeRefreshLayout) view.findViewById(R.id.swipeContainer_OwnerRequest);
    mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar3);
    if (!mFirstStartup)
        mProgressBar.setVisibility(View.GONE);


    return view;
}


    @Override
public void onStart()
{
    super.onStart();

    if(mRecyclerView.getAdapter() == null)
    {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mRecyclerView.setAdapter(mRecyclerAdapter);
        mRecyclerView.addItemDecoration(mHeadersDecor);
        mSwipeContainer.setOnRefreshListener(Refresh);
        mSwipeContainer.setColorSchemeResources(R.color.colorPrimary, R.color.white);


    }


}
Run Code Online (Sandbox Code Playgroud)

加载缓慢的片段在 pagerAdapter 中创建了上面的 3 个片段。不调用 setAdapter() 使其流畅,但当然不会渲染任何内容。我的 recyclerview 的布局是一个非常扁平的布局构建,带有 ConstraintsLayout。

有谁知道如何处理这样的情况?

我之前使用 pagerAdapter 并缓存了 bottomNavView 的所有 3 个片段,但我认为这是不好的做法,因为没有滑动手势,也不需要加载和缓存所有片段。