Android 在“当前”选项卡中重新加载活动

Android 在“当前”选项卡中重新加载活动,android,tabactivity,Android,Tabactivity,我注意到,如果我尝试单击“当前”选项卡返回该特定活动的第一个屏幕,则该操作根本不会发生。虽然许多答案建议包括addFlag(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP),但它根本不会发生 假设当前选项卡是一个搜索活动。这已在MainActivity文件中定义: final Intent searchIntent = new Intent().setClass(this, SearchActivity.class); searchIntent.addFlag

我注意到,如果我尝试单击“当前”选项卡返回该特定活动的第一个屏幕,则该操作根本不会发生。虽然许多答案建议包括addFlag(Intent.FLAG\u ACTIVITY\u CLEAR\u 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的主要级别,我肯定会单击上面的tab按钮。但我不确定的是,如果我遗漏了

为了看看这是否与onResume有关,我重写了onResume方法并添加了invalidate命令或其他命令


我是否在片段级别或主要活动本身中遗漏了一些内容?

听起来您只需要删除堆积在后台的所有片段。使用popBackStack(null,FragmentManager.POP_BACK_STACK_include)应该可以做到这一点。当用户点击最上面的标签时调用它

“听起来您只需要删除所有已删除的片段 已堆积到backstack上。使用popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)应该可以做到这一点。调用 当用户点击最上面的标签时。”

我猜您指的是在该活动下的每个片段中实现popStackBack,不是吗?我试着做了一个改变,不幸的是它并没有真正起作用

以下是我正在测试的SearchBankFragment代码中的一些基本行(在OnCreateView中):

我只是尝试了一个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

我认为此时,如果当前选项卡与单击的选项卡相同,TabHost没有处理事件的功能。也许正如一些人所说,必须创建TabHost的另一个子类来处理这个问题。
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();

        }
    });