2013-10-08 11 views
6

को बदलना मैंने अभी Fragments के साथ खेलना शुरू कर दिया है और मैं गतिशील रूप से टुकड़ों को जोड़ने/बदलने की कोशिश कर रहा हूं।एंड्रॉइड फ्रैगमेंट्स को गतिशील रूप से

मैं उन्हें ठीक जोड़ सकते हैं ताकि तरह ...

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    FragmentManager fragMan = getSupportFragmentManager(); 
    FragmentTransaction fragTran = fragMan.beginTransaction(); 

    FragOne fOne = new FragOne(); 
    FragTwo fTwo = new FragTwo(); 
    FragThree fThree = new FragThree(); 

    fragTran.add(R.id.frag_cont_one, fOne); 
    fragTran.add(R.id.frag_cont_two, fTwo); 
    fragTran.commit(); 



} 

लेकिन जब मैं fThree साथ fTwo को बदलने के लिए अनुप्रयोग क्रैश प्रयास करें। मैं कैसे बदलता हूं

fragTran.replace(R.id.frag_cont_two, fThree); 
fragTran.addToBackStack(null); 
fragTran.commit(); 

कोई विचार?

धन्यवाद

10-08 21:30:44.710: E/Trace(3219): error opening trace file: No such file or directory (2) 
10-08 21:30:44.869: D/AndroidRuntime(3219): Shutting down VM 
10-08 21:30:44.869: W/dalvikvm(3219): threadid=1: thread exiting with uncaught exception   (group=0x40a71930) 
10-08 21:30:44.889: E/AndroidRuntime(3219): FATAL EXCEPTION: main 
10-08 21:30:44.889: E/AndroidRuntime(3219): java.lang.RuntimeException: Unable to start activity ComponentInfo{evans.louis.fragments/evans.louis.fragments.Home}: java.lang.IllegalStateException: commit already called 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.os.Looper.loop(Looper.java:137) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at dalvik.system.NativeStart.main(Native Method) 
10-08 21:30:44.889: E/AndroidRuntime(3219): Caused by: java.lang.IllegalStateException: commit already called 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:582) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at evans.louis.fragments.Home.onCreate(Home.java:37) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.Activity.performCreate(Activity.java:5104) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
10-08 21:30:44.889: E/AndroidRuntime(3219):  ... 11 more 

संपादित करें: LogCat जोड़ा

+1

पेस्ट लॉग उत्पादन मिल जाएगा – digitaljoel

+0

@digitaljoel किया! :) –

+1

उस त्रुटि संदेश के लिए Google यह देता है, जो आपकी समस्या की संभावना है। http://stackoverflow.com/questions/18697490/android-erro-commit-already-called-when-remove-a-fragment – digitaljoel

उत्तर

19

समस्या अपने logcat उत्पादन में सही नहीं है:

Caused by: java.lang.IllegalStateException: commit already called 

आप एक नई लेन-देन शुरू करने की आवश्यकता:

fragTran = fragMan.beginTransaction(); 
fragTran.replace(R.id.frag_cont_two, fThree); 
fragTran.addToBackStack(null); 
fragTran.commit(); 
+0

आह ठीक है ठीक है। मुझे नहीं पता था कि आपको startTransaction() को कॉल करना था; फिर। यह धन्यवाद काम करता है! –

+0

बिना किसी समस्या के ठीक काम कर रहा है। –

0

मैं commit() बुला और फिर जगह टुकड़ा के बाद इस मुद्दे को हल आप

fragmentTransaction = fragmentManager.beginTransaction(); 

if(position==0){ 
    fragmentTransaction.replace(android.R.id.content, f1_fragment); 
else{ 
    fragmentTransaction.replace(android.R.id.content, f2_fragment); 
} 

fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 
बाकी

से शुरू कर देना चाहिए आप दुर्घटना से प्रतिबद्ध पहले से ही त्रुटि कहा

संबंधित मुद्दे