Фрагмент onResume не вызывается после того, как фрагмент отсоединен, а затем повторно присоединен

Я пытаюсь разобраться со всеми новыми API ActionBar и Fragments. У меня есть основное действие, и я хочу, чтобы оно управляло двумя разными вкладками. Я использую ActionBarSherlock для поддержки более старой версии, чем ICS.

Каждая вкладка содержит свой собственный Fragment (каждая из них является подклассом SherlockListFragment). Я заставил ее работать в основном хорошо, но у меня есть проблема, в которой я уверен, что это глупо, но я пока не могу понять это:

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

Но во второй раз, когда вы видите вкладку (после переключения и переключения), ни список не заполняется, ни элементы меню ActionBar.

Вот как я переключаю вкладки:

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
    SherlockListFragment toAttach = // Find the right fragment here...

    if (toAttach != null) {
        if (toAttach.isAdded() == false) {
            transaction.add(R.id.tab_placeholder, toAttach,
                    REMINDER_FRAGMENT_TAG);
        } else {
            transaction.attach(toAttach);
        }
    }
}

И onTabUneselect я отделяю Фрагмент:

@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    SherlockListFragment toDetach = // Find the right fragment
    if (toDetach != null) {
        transaction.detach(toDetach);
    }
}

Я заполняю списки и меню ActionBar в onResume:

@Override
public void onResume() {
    super.onResume();
    setHasOptionsMenu(true);
    fillRemindersList();
}

Я также пробовал это в onStart и onCreateView, но это не помогло...

Итак, что мне здесь не хватает? И если в моем коде есть другие проблемы, о которых я не знаю, сообщите об этом.

Спасибо!

ИЗМЕНИТЬ:

Я только что подтвердил, что onResume не вызывается после переключения вкладок, что определенно неправильно, поскольку я их отсоединяю и снова присоединяю... Я неправильно переключаю вкладки?


person Avi Shukron    schedule 24.04.2012    source источник


Ответы (2)


Попробуйте использовать transaction.remove(fragment) в onTabUnselected и transaction.replace в onTabSelected.

person Sid Patel    schedule 04.05.2012
comment
Спасибо, я надеюсь, что это ответ, хотя он уже не актуален, потому что я переключился на навигацию по списку. (В моем случае имеет больше смысла и отлично работает :)) - person Avi Shukron; 07.05.2012
comment
В моем случае вызов «FragmentTranaction.remove (фрагмент № 1)» во фрагменте № 1 непосредственно перед вызовом «FragmentTransaction.commit ()» помогает мне заставить фрагмент № 1 пройти через onPause () ... onDestroyView () при замене и перейти через onCreateView() ... onResume(), когда я возвращаюсь к фрагменту № 1, нажимая кнопку «Назад». - person Grigori A.; 04.03.2013

Выполнение beginTransaction() и commit() вне этого кода, как я предполагаю, или вы забыли? Вы также можете увидеть прием, использованный здесь, из примеров: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java

person Mattias Isegran Bergander    schedule 24.04.2012
comment
Ни один! Как видите, я реализую интерфейс ActionBar.TabListener. В обратных вызовах TabListener вы получаете готовую к использованию FragmentTransaction (то есть - начатую), и вы не должны вызывать фиксацию, как явно указано в документации. Кроме того, фрагменты меняются местами, так что это не так... - person Avi Shukron; 25.04.2012