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