2013-06-19 39 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