Сценарий, с которым я столкнулся, находится в моем приложении. У меня есть одноуровневая и двухслойная макет. Вместо того, чтобы индивидуально обрабатывать каждую возможную операцию навигации между экранами, для каждого другого стиля макета, я использую функцию, которая правильно настраивает макет при заданном экране.
Это в основном оператор switch
для каждого экрана в приложении, с вложенным оператором switch
на каждом экране для обработки каждого стиля макета. Это то, о чем я говорю в коде:
protected void setupScreen() {
switch(currentScreen) {
case SCREEN_ONE:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break;
case SCREEN_TWO:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break
// ... etc ....
}
}
В разделе, где я хочу выполнить действия по настройке экрана, это состоит из следующих основных трех операций:
// Create the fragments if necessary
if (screenFragment == null) {
screenFragment = new myFragment();
}
// Remove the existing fragments from the layout views
// HOW???
// Add the fragments for this screen to the view
getSupportFragmentManager().beginTransaction().add(pane1.getId(), myFragment, "myFragment").commit();
Как вы можете видеть, с тем, с чем я борюсь, является , как сделать второй шаг. Как удалить все Fragment
из заданного View
, не зная точно, какие из них вы хотите удалить? Самое близкое, что я нашел, это FragmentTransaction.replace()
, который успешно делает это для каждого случая , но, когда оказывается, что вы заменяете Fragment
на тот же фрагмент. В этом случае он не удаляет все, а затем добавляет (как предлагает документация), он просто удаляется. Это проблема с использованием библиотек совместимости или это не способ использования FragmentTransaction.replace()
?
В любом случае, как я должен это делать? Должен ли я кодировать функцию removeAllFragments()
, чтобы проходить через каждый фрагмент и отсоединять его, или есть способ сделать первую половину того, что заявляет функция "два в одном" FragmentTransaction.replace()
?