Удаление / замена фрагментов - PullRequest
0 голосов
/ 15 октября 2018

Я начинаю работать с фрагментами и столкнулся с проблемой.У меня есть фрагменты просмотра файлов (более одного) и фрагмент поиска.Чтобы упростить задачу, я добавляю свой фрагмент для просмотра файлов в backstack всякий раз, когда иду на поиск, чтобы можно было легко вернуть его обратно, если я решу просто закрыть его.Теперь проблема в том, что когда я нажимаю на файл во фрагменте поиска, чтобы перейти к конкретному фрагменту, в котором находится этот файл, всегда вызывается onCreateView первого фрагмента (который находился в backstack), даже если я его заменил (?) и я не хочу этого.Вот что я делаю, чтобы изменить фрагменты в файле поиска, нажав:

1. Я вызываю pop, чтобы перейти к предыдущему фрагменту

@Override
public boolean onSearchViewClose() {
    if (getActivity() != null) {
        getActivity().getSupportFragmentManager().popBackStack();
        return true;
    }
    return false;
}

2.Затем я заменяю оставшийся фрагмент

public void setFragment(Fragment fragment, String tag, boolean clearBackStack, boolean addToBackStack) {
    // Insert the fragment by replacing any existing fragment
    hideLoadingProgress();
    FragmentManager fragmentManager = getSupportFragmentManager();
    if (clearBackStack) {
        clearBackStack(fragmentManager);
    }
    FragmentTransaction transaction = fragmentManager.beginTransaction().replace(R.id.content_frame, fragment, tag);
    if (addToBackStack) {
        transaction.addToBackStack(null);
    }
    transaction.commit();
}

при очистке backstack:

public void clearBackStack(FragmentManager fragmentManager) {
    for (int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
        fragmentManager.popBackStack();
    }
}

Даже если я не очищаю backstack, проблема сохраняется. Заранее спасибо за ответы.

1 Ответ

0 голосов
/ 23 октября 2018

Ответ был прост - я должен был просто использовать getActivity (). GetSupportFragmentManager (). PopBackStackImmediate ();при выходе из режима поиска, так как предыдущий метод не работал, потому что он ждал, пока программа вернется в свой цикл событий (асинхронный).

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