Вложенные фрагменты Android - внешний фрагмент не реагирует после обратного нажатия из внутреннего фрагмента - PullRequest
0 голосов
/ 13 февраля 2019

Итак, я реализовал базовый вложенный фрагмент - я добавил их в стек, чтобы onBackPressed от внутреннего фрагмента привел меня к внешнему фрагменту - однако, когда это происходит, внешний фрагмент не отвечает.

Соответствующийкод:

TaskActivity - содержит внешний фрагмент:

соответствующая функция:

public void getTaskInfo(Task currentTask){
        //Open the TaskInfoFragment for this task
        TaskInfoFragment taskInfo = new TaskInfoFragment();
        taskInfo.setCurrentTask(currentTask);
        android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.setCustomAnimations(R.anim.slide_in,0,0,R.anim.slide_out);
        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.frag_container, taskInfo);
        transaction.addToBackStack(null);
        FrameLayout frameLayout = findViewById(R.id.frag_container);
        frameLayout.setClickable(true);

        // Commit the transaction
        transaction.commit();
    }

Внутренний фрагмент, запущенный из TaskInfoFragment:

NotesFragment notesFragment = new NotesFragment();
                FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
                FrameLayout frameLayout = rootView.findViewById(R.id.notes_fragment);
                frameLayout.setClickable(true);
                transaction.addToBackStack(null);
                transaction.add(R.id.notes_fragment, notesFragment).commit();

OnBackPressed вTaskActivity (в котором находится внешний фрагмент):

public void onBackPressed() {
        if(NotesFragment.isAttached()) {
            FragmentManager fm = getSupportFragmentManager();
            for (Fragment frag : fm.getFragments()) {
                if (frag.isVisible()) {
                    FragmentManager childFm = frag.getChildFragmentManager();
                    if (childFm.getBackStackEntryCount() > 0) {
                        childFm.popBackStack();
                        return;
                    }
                }
            }
        }
        else {

            this.setTitle(thisTaskListTitle); //Set the title to be the TaskList's title
            super.onBackPressed();
        }

Я попытался установить clickable (true) для соответствующего frameLayout (того, который принадлежит внешнему фрагменту), но это не помогло.

Есть идеи?

Заранее спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

Очевидно, что происходило то, что структура моего внутреннего фрагмента все еще оставалась активной.Таким образом, хотя внутренний фрагмент был отсоединен, его структура кадра все еще покрывала внешний фрагмент и улавливала все его щелчки.

Исправлено, добавив следующий код в onBackPressed после childFm.popBackStack ();

                    FrameLayout frameLayout = findViewById(R.id.notes_fragment);
                    frameLayout.setClickable(false);
...