Как избежать наложения фрагментов

#java #android #android-fragments #android-listfragment

#java #Android #android-фрагменты #android-listfragment

Вопрос:

Я пытаюсь отобразить список, используя ListFragment и пользовательский адаптер. Каждая строка содержит текстовое представление и кнопку. Это выглядит так :

Обычный вид

При нажатии кнопки я хочу, чтобы элемент списка изменился. Для того, чтобы сделать это, я хочу заменить существующий ListFragment другим. Моя проблема в том, что второй фрагмент добавляется поверх первого, вот так :

Наложение фрагментов

Вот код, который выполняется, когда я нажимаю на кнопку, в пользовательском ArrayAdapter :

 public void onClick(View view) {
                //Some unrelated stuff

                //I want to replace the old ListGeneratedFragment by a new one
                ListGeneratedFragment fragment = new ListGeneratedFragment();
                ((MainActivity)getContext())
                        .getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.main_list_meals, fragment)
                        .commit();
            }
});
  

Я уже использовал ту же технику в других частях своего кода, и она отлично работает. Я не понимаю, почему старый фрагмент здесь не заменяется.

Комментарии:

1. Ваш первый фрагмент также находится в R.id.main_list_meals контейнере? Как этот первый фрагмент добавляется в контейнер?

2. Да, первый фрагмент также находится в контейнере R.id.main_list_meals. Он добавляется с помощью getChildFragmentManager().beginTransaction.replace(…).commit(), Поэтому он добавляется таким же образом, но в этом случае он не работает

3. Итак, в одном случае вы используете Activity getSupportFragmentManager() , а в другом случае вы используете совершенно другой, FragmentManager поскольку вы используете getChildFragmentManager() какой-то родительский фрагмент?