0

我注意到,如果我尝试单击当前选项卡以返回该特定活动的第一个屏幕,则根本不会发生该操作。虽然许多答案建议包括 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方法并添加了invalidate命令或其他东西。

我是否错过了片段级别或主要活动本身的某些内容?

4

2 回答 2

0

“听起来你只需要删除所有堆积在后台堆栈上的片段。使用 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

于 2013-06-20T10:54:29.427 回答
0

听起来您只需要删除所有堆积在后堆上的碎片即可。使用 popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) 应该可以解决问题。当用户点击最顶部的选项卡时调用它。

于 2013-06-19T10:06:53.257 回答