2013-06-19 42 views
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的主要级别,我肯定会点击上面的tab按钮。但我不确定的是,如果我已经省略了。

只是看它是否与onResume有关,我已经覆盖了onResume方法并添加了invalidate命令或其他东西。

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

回答

0

听起来就像你只需要删除所有已堆积到背层上的碎片。使用popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE)应该可以做到。打电话,当用户点击最顶部的标签。

+0

我个墨水在此时,如果currentTab与Clicked选项卡相同,则TabHost不具有处理事件的功能。也许有人说,必须创建另一个TabHost的子类来处理这个问题。 –

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