2011-12-27 10 views
19

ここに提供されているサンプルコードを使用して、アクションバーにナビゲーションタブを追加しています: http://developer.android.com/guide/topics/ui/actionbar.html私はActionBarSherlockを使用しています。TabListener.onTabSelected()にNull FragmentTransactionが渡されます

My 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に渡されているので、アプリがnullポインタ例外で吹く:

​​

そして私は、私の活動にリスナーを設定しました。私はどこかで創作すべきでしょうか?

私はドキュメントを何度も読んできました。私はかなり混乱しています。私が見逃したことが分かりますか?

+0

から派生している場合は、このActionBarSherlockのバグレポートのサンプルアクティビティコードが役立ちます。https://github.com/JakeWharton/ActionBarSherlock/pull/402 –

答えて

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()でしか動作しません。 –

16

私は役に立つ上記Ollie第者のポストを見つけましたが、十分では詳述しません。次のように私は(:あなたはTabListenerに実装他の方法と同じ変更を行う必要があります)。ActionBar Guideで提供されているコードをリファクタリングするために管理

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コールを追加することを怠った。 –

+0

乾杯、ボスウェル、私もそれを逃して、あなたのコメントのおかげでそれを見つけた – Dan2552

+0

上記の答えよりも良い。 –

1

それはActionBarSherlockのバグでした。 JakeWhartonのバージョン4.0.1(2012-03-25)で修正されました。

これでActionBarSherlockが正しく機能します。私はここに解決策を見つけた

関連する問題