2011-11-06 12 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 में कोड के आधार पर इस पर काबू पाने के बारे में कोई विचार है?


संपादित करें: मुझे लगता है कि कोड में भी है, लेकिन एप्लिकेशन क्रैश से पहले मारा नहीं प्राप्त करता है के रूप में ही attach के लिए चला जाता है लगता है।

उत्तर

13

ऐसा प्रतीत होता है कि कोड में कई स्थानों को प्रतिस्थापित करने और जोड़ने और निकालने के साथ अलग करने से कोड को प्री-एपीआई लेवल 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

यदि आप एपीआई 4 compatablity पैकेज -android.support.v4.app.FragmentTransaction में FragmentTransaction उपयोग कर रहे हैं - आप देते हैं और पूर्व एपीआई स्तर 13 प्लेटफार्मों पर तरीकों को अलग कॉल करने के लिए सक्षम होना चाहिए।

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

+0

संबंधित ब्लॉग पोस्ट के बीच स्विच खो दिया है निकालें: [ सभी के लिए टुकड़े] (http://android-developers.blogspot.com/2011/03/fragments-for-all.html) – blahdiblah