在又有大量应用程序启动后,碎片消失了

时间:2019-05-14 06:39:42

标签: android android-fragments fragmentmanager

我有5个片段的活动,这些片段可以通过按BottomNavigationView中的按钮进行切换:

bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
        switch (item.getItemId()) {
            case R.id.first:
                replaceFragment(FIRST_TAG);
                return true;
            case R.id.other:
           // last four fragments
            default:
                return false;
        }
    });

在replaceFragment中:

private void replaceFragment(@NonNull String tag) {
    if (!checkFragment(tag)) {
          addFragment(getFragmentByTag(tag), tag);
    }
    showFragment(tag);
}

сheckFragment:

private boolean checkFragment(String tag) {
    return fm.findFragmentByTag(tag) != null;
}

addFragment:

private void addFragment(Fragment fragment, String tag) {
    if (!checkFragment(tag)) {
        fm.beginTransaction().add(R.id.frame, fragment, tag).hide(fragment).commit();
    }
}

showFragment:

private void showFragment(String tag) {
    // currentFragmentTag defines as FIRST_TAG in fields block
    currentFragment = fm.findFragmentByTag(currentFragmentTag);
    FragmentTransaction transaction = fm.beginTransaction();
    if (currentFragment != null) {
        transaction.hide(currentFragment);
    }
    transaction
            .attach(getFragmentByTag(tag))
            .show(getFragmentByTag(tag))
            .commit();
    currentFragmentTag = tag;
}

这样做是为了避免每次显示片段时都在片段中加载数据!所有添加到FragmentManager的片段仅一次,以后仅调用 hide(previousFragment) show(nextFragment)

这很好! 在应用程序进入后台并启动新的重型应用程序之前。我的应用程序在后台活动被破坏,当我返回应用程序时,只有BottomNavigationView且显示为空。 我检查了调试。 FragmentManaget.getActiveFragments()返回五个片段的列表。 因此,活动被还原,FragmentManager被还原,FragmentManager包含片段。 为什么片段未显示在屏幕上?

1 个答案:

答案 0 :(得分:0)

浏览代码后,我能想到的是将五个片段之一设置为在应用程序运行时显示的默认片段。 尝试类似的东西:

bottomNavigationView.getMenu().findItem(R.id.first).setChecked(true);

onCreate()onResume()内部进行; 祝你好运!