2011-11-06 7 views
10

コードhereを動作させようとしています。それはうまくコンパイルされます。実行されます。そしてそれはタブ1(3の)をロードします。しかし、私は2番目か3番目のタブをクリックしたときに、私はこれを取得:FragmentTransaction .attachと.detachのアクションバータブ

java.lang.NoSuchMethodError: android.app.FragmentTransaction.detach

これは、ここでは、コードで起こる

public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    if (mFragment != null) { 
     //ft.detach(mFragment); //requires API Level 13 
     ft.remove(mFragment); //this does not do the same thing as detach 
    } 
} 

私はdetachが、私が試したAPIレベル13にのみ利用可能であることがわかりましたremoveでも、明らかに同じことはしません。最初にlinkのコードに基づいてこれを克服する方法については誰にも分かりますか?


EDIT: 私はコードでもありますが、アプリがクラッシュする前にヒットされないのと同じでattachのために行くと思います。

答えて

13

addとremoveを使ってアタッチとデタッチを参照するコードのいくつかの箇所を置き換えると、コードがAPI前のレベル13環境で正常に機能するようになります。

public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
     mArgs = args; 

     // Check to see if we already have a fragment for this tab, probably 
     // from a previously saved state. If so, deactivate it, because our 
     // initial state is that a tab isn't shown. 
     mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag); 
     if (mFragment != null) { // && !mFragment.isDetached()) { 
      FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction(); 
      //ft.detach(mFragment); 
      ft.remove(mFragment); 
      ft.commit(); 
     } 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     //if (mFragment == null) { 
      mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); 
      ft.add(android.R.id.content, mFragment, mTag); 
     //} else { 
     // ft.attach(mFragment); 
     //} 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      //ft.detach(mFragment); //requires API 13 
      ft.remove(mFragment); //this does not do the same thing as detach 
     } 
    } 
+4

から一貫したアクションバーの経験を持っていますが、ft.addで/タブ – Arvis

2

あなたはAPI 4+ compatablityパッケージ-android.support.v4.app.FragmentTransactionでFragmentTransactionを使用している場合 - あなたは添付して、事前APIレベル13プラットフォーム上のメソッドを呼び出す取り外すことができるはずです。

http://developer.android.com/resources/samples/Support4Demos/index.html

+0

関連ブログの記事を切り替える際、フラグメント状態が失われた削除されますhttp://actionbarsherlock.com/ を使用します。[すべてのフラグメント](http://android-developers.blogspot.com/2011/03/fragments-for-all.html) – blahdiblah

1

またはちょうどあなたが2.xのアップ

関連する問題