2011-12-27 59 views
19

我使用此處提供的示例代碼嚮導航欄中添加導航選項卡: http://developer.android.com/guide/topics/ui/actionbar.html我正在使用ActionBarSherlock。將FragmentTransaction傳遞給TabListener.onTabSelected()

我的TabListener直接從文檔複製。

​​

我成立了我的活動監聽器:

ActionBar.Tab tab = actionBar.newTab(); 
    tab.setText(getString(R.string.TAB_CALC)); 
    tab.setTabListener(new TabListener<StrokeSelectorFragment>(this, "blah", StrokeSelectorFragment.class)); 
    actionBar.addTab(tab); 

,但應用程序,因爲空FragmentTransaction在聽衆傳遞給onTabSelected()用一個空指針異常炸燬。我應該在哪裏創建一個?

我一遍又一遍地處理文檔,而且我很困惑。你能看到我錯過了什麼嗎?

+0

衍生本ActionBarSherlock bug報告中的示例代碼的活動將幫助:https://github.com/JakeWharton/ActionBarSherlock/pull/402 – 2012-07-26 20:01:16

回答

15

這似乎是兼容性庫(因此通過關聯ActionBarSherlock)的問題。解決方案是忽略傳入的(null)FragmentTransaction,並獲得您自己的。下面是馬克·墨菲的例子:

 FragmentManager fragMgr = getSupportFragmentManager(); 
     FragmentTransaction ft = fragMgr.beginTransaction(); 
     ft.commit(); 

https://groups.google.com/forum/#!msg/android-developers/pCnSx7sTIZ8/cTt1L91M2NgJ

https://groups.google.com/group/actionbarsherlock/browse_thread/thread/89eac58c13fe1ae0

+0

commit()在這種情況下是必要的嗎?該文件說「不」,但你說,爲什麼?在我的測試中,它只適用於commit()。 – 2012-11-27 18:56:24

16

我發現上面有幫助奧利的職位,但不夠詳細。我設法如下重構在ActionBar Guide提供的代碼(注意:你必須在TabListener實施的其他方法相同的變化):

public void onTabSelected(Tab tab, FragmentTransaction ignoredFt) { 
    FragmentManager fragMgr = ((FragmentActivity)mActivity).getSupportFragmentManager(); 
    FragmentTransaction ft = fragMgr.beginTransaction(); 

    // Check if the fragment is already initialized 
    if (mFragment == null) { 
     // If not, instantiate and add it to the activity 
     mFragment = Fragment.instantiate(mActivity, mClass.getName()); 

     ft.add(android.R.id.content, mFragment, mTag); 
    } else { 
     // If it exists, simply attach it in order to show it 
     ft.attach(mFragment); 
    } 
} 
+3

感謝您的支持。有趣的是,起初我忽略了添加ft.commit調用而沒有明顯的後果。 – 2012-02-03 23:09:03

+0

乾杯@Boswell,我也錯過了,只是發現它感謝您的意見 – Dan2552 2012-04-17 13:32:54

+0

比以上答案更好。 – 2012-11-27 17:50:18

1

這是錯誤的ActionBarSherlock。由JakeWharton在4.0.1版(2012-03-25)修復。

現在ActionBarSherlock正常工作。