Перезагрузка активности в текущей вкладке

Я заметил, что если я попытаюсь щелкнуть текущую вкладку, чтобы вернуться к первому экрану этого конкретного действия, действие вообще не произойдет. Хотя во многих ответах предлагается включить addFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP), этого не происходит вообще.

Предположим, что текущая вкладка — это действие поиска. Это было определено в файле MainActivity:

final Intent searchIntent = new Intent().setClass(this, SearchActivity.class);
     searchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
TabSpec tabSearch = tabHost.newTabSpec(AppConstants.TAG_SEARCH).setIndicator("",resources.getDrawable(R.drawable.tab_search_off_btn)).setContent(searchIntent);

Путь навигации будет следующим: SearchActivity -> SearchByBankFragment -> CardListFragment -> CategoryListFragment ->.

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

Скажем, я нахожусь в CardListFragment и решаю вернуться на основной уровень SearchActivity, я определенно нажму кнопку вкладки выше. Но в чем я не уверен, так это в том, что если я пропустил.

Просто чтобы увидеть, связано ли это с onResume, я переопределил метод onResume и добавил команду недействительности или что-то в этом роде.

Я что-то пропустил либо на уровне фрагмента, либо на самом основном действии?


person Melvin Mah    schedule 19.06.2013    source источник


Ответы (2)


Похоже, вам просто нужно удалить все фрагменты, которые были сложены в стопку. Использование popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) должно помочь. Вызывайте это, когда пользователь нажимает на самую верхнюю вкладку.

person SBerg413    schedule 19.06.2013
comment
Я думаю, что на данный момент у TabHost нет функции для обработки событий, если currentTab совпадает с нажатой вкладкой. Возможно, как некоторые сказали, что для этого необходимо создать еще один подкласс TabHost. - person Melvin Mah; 01.07.2013

«Похоже, вам просто нужно удалить все фрагменты, которые были сложены в стопку. Использование popBackStack (null, FragmentManager.POP_BACK_STACK_INCLUSIVE) должно помочь. Вызывайте это, когда пользователь нажимает на самую верхнюю вкладку».

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

Вот некоторые из основных строк в коде SearchBankFragment, который я тестирую (он находится в OnCreateView):

final Activity activity = SearchActivity.activity //parent Activity;
final TabHost tabHost = (TabHost) activity.getParent().findViewById(android.R.id.tabhost);

Я только что попытался добавить событие onTabChanged, но я не думаю, что оно работает:

tabHost.setOnTabChangedListener(new OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.fragmentContainer, new SearchMainFragment());
            ft.remove(SearchBankFragment.this);
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            ft.commit();

        }
    });

Примечание. Навигация выглядит следующим образом: SearchActivity -> SearchMainFragment -> SearchBankFragment -> CardListFragment -> CategoryListFragment -> OfferListFragment -> OfferActivity

person Melvin Mah    schedule 20.06.2013