Фрагмент Android не удаляется и не заменяется - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь удалить или заменить фрагмент из контейнера.Фрагмент создается в onCreate () действия и должен исчезнуть после нажатия кнопок.Однако я не могу удалить или заменить фрагмент.

В отчаянии я попытался заменить контейнер пустым фрагментом того же цвета фона, однако пустой фрагмент просто отображается под другим фрагментом вместоэто заменяется.У меня есть метод для очистки всех фрагментов, который работает в каждом случае, кроме dashboardInfoFragment.Я не уверен, что это потому, что я создаю его в onCreate () или что-то еще, что я не могу определить.Я получаю те же результаты, используя замену, что и для добавления с транзакцией фрагмента.Мне никогда не удавалось удалить один фрагмент из этого приложения, но clearFragments () работает для всех остальных фрагментов.

Я просмотрел бесчисленные сообщения на эту тему и перепробовал все, но не могу удалить этофрагмент по ссылке на фрагмент или по тегу или в clearFragments (), поэтому любая помощь будет принята с благодарностью.

Вот соответствующий фрагмент действия

public class DashboardActivity extends AppCompatActivity {

DashboardInfoFragment dashboardInfoFragment;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard);

    dashboardInfoFragment = DashboardInfoFragment.newInstance();
    replaceFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");

    menuButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (!isClassMenuOpen) {
                startClassMenu();

            } else {
                clearAllFragments();
                startClassMenu();
            }
        }
    });

    homeButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            clearAllFragments();

            replaceFragment(R.id.dashboard_table_fragment_place,     dashboardInfoFragment, "dashboardInfoFragment");
        }
    });
}

public void startClassMenu() {
    clearAllFragments();

// This doesn't work
    removeSingleFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");

    dashboardInfoFragment = DashboardInfoFragment.newInstance();
    replaceFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");

// Trying to replace with blank fragment but gets displayed below the dashboardInfoFragment
    blankFragment = BlankFragment.newInstance();
    replaceFragment(R.id.dashboard_table_fragment_place, blankFragment, "blankFragment");

    ClassMenuFragment classMenuFragment = ClassMenuFragment.newInstance(classList);
    replaceFragment(R.id.class_menu_fragment_place, classMenuFragment, "classMenuFragment");
}

// Removes all fragments except for dashboardInfoFragment
public void clearAllFragments() {

    try {
        FragmentManager manager = getSupportFragmentManager();
        manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

        isClassMenuOpen = false;
        isSettingsMenuOpen = false;
        isModuleOptionsMenuOpen = false;

    } catch (Exception e) {

        e.printStackTrace();
    }
}

public void replaceFragment(int id, Fragment fragment, String tag) {
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(id, fragment);
    transaction.addToBackStack(tag);
    transaction.commit();
}


    // Some of my attempts at removing the fragment
public void removeSingleFragment(int container, Fragment fragment, String tag) {
//    if (getSupportFragmentManager().findFragmentById(container) != null) {
//        getSupportFragmentManager()
//                    .beginTransaction().
//                            remove(getSupportFragmentManager().findFragmentById(container)).commit();
//        }
//
//        getSupportFragmentManager()
//                .beginTransaction()
//                .replace(container, fragment)
//                .commit();

        //FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

//        if (fragment != null) {
//            transaction.remove(fragment);
//              transaction.commit().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
//            fragment = null;
//
//        }
            FragmentManager fragmentManager =  getSupportFragmentManager();
            FragmentTransaction transaction =  fragmentManager.beginTransaction();


    if(fragment!=null&&fragment.isAdded()) {
        transaction =  fragmentManager.beginTransaction();
        transaction.remove(fragment);
        transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
        transaction.commitAllowingStateLoss();
    }

    transaction =  fragmentManager.beginTransaction();
    transaction.replace(container, fragment, tag).commit();
}
        }

    });

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...