show无法显示先前隐藏的片段

问题描述

我想根据OnClickListener隐藏/显示片段。隐藏片段是可行的,但是当我想再次显示它时,它不会显示。我不想使用replace(),因为该片段需要一段时间才能加载,因为它是从服务器下载图像的。

这是我的replace方法代码

private void replaceFragment (Fragment fragment){
    String backStateName = fragment.getClass().getName();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    if (addedFragments.size() != 0) {
        for (Fragment frag :
                addedFragments) {
            if (frag !=null) {
                String fragTag = frag.getClass().getName();
                if (fragmentManager.findFragmentByTag(fragTag).isVisible() && !fragTag.equals(backStateName)) {
                    fragmentTransaction.hide(fragmentManager.findFragmentByTag(frag.getClass().getName()));
                    Log.d("frag","hide" + fragTag);
                }
            }
        }

    }
    if(fragmentManager.findFragmentByTag(backStateName) != null && fragmentManager.findFragmentByTag(backStateName).isAdded()) {
        //if the fragment exists,show it.
        fragmentTransaction.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out).show(fragmentManager.findFragmentByTag(backStateName)).commit();
        Log.d("frag","show frag"+fragmentManager.findFragmentByTag(backStateName).getClass().getName());
    }

}

以及侦听器的代码

@Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        
        if (menuItem.getItemId() == R.id.option1) {

            if (fragmentManager.findFragmentByTag(WantedAnimals.class.getName()) == null){
                WantedAnimals wantedAnimals = new WantedAnimals();
                fragmentManager.beginTransaction().add(R.id.container_fragment,wantedAnimals,wantedAnimals.getClass().getName()).commit();
                addedFragments.add(wantedAnimals);
            }   else {
                replaceFragment(fragmentManager.findFragmentByTag(WantedAnimals.class.getName()));
            }
        }
        if (menuItem.getItemId() == R.id.option2) {
            if (fragmentManager.findFragmentByTag(FoundAnimals.class.getName()) == null){
                FoundAnimals foundAnimals = new FoundAnimals();
                fragmentManager.beginTransaction().add(R.id.container_fragment,foundAnimals,foundAnimals.getClass().getName()).commit();
                addedFragments.add(foundAnimals);
            }   else {
                replaceFragment(fragmentManager.findFragmentByTag(FoundAnimals.class.getName()));
            }
        }
        if (menuItem.getItemId() == R.id.option3) {
            if (fragmentManager.findFragmentByTag(AnimalsToGiveAway.class.getName()) == null){
                AnimalsToGiveAway animalsToGiveAway = new AnimalsToGiveAway();
                fragmentManager.beginTransaction().add(R.id.container_fragment,animalsToGiveAway,animalsToGiveAway.getClass().getName()).commit();
                addedFragments.add(animalsToGiveAway);
            }   else {
                replaceFragment(fragmentManager.findFragmentByTag(AnimalsToGiveAway.class.getName()));
            }
        }

        return true;
    }

解决方法

我很笨,我在片段的on create方法中插入了一个旧代码,如果容器不是空的话,它们会删除所有视图

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...