Comment résoudre illégale de l'état d'exception, tout en supprimant fragment de android
Je suis l'ajout et la suppression fragment de façon dynamique dans android, tout en supprimant le fragment .Je reçois cette exception quelqu'un peut dire comment faire pour supprimer fragment?
12-09 15:00:16.363: ERROR/AndroidRuntime(673): FATAL EXCEPTION: main
12-09 15:00:16.363: ERROR/AndroidRuntime(673): java.lang.IllegalStateException: commit already called
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:499)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.app.BackStackRecord.commit(BackStackRecord.java:491)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at com.gcm.fragment.GcmFragmentActivity.onClick(GcmFragmentActivity.java:50)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.view.View.performClick(View.java:3110)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.view.View$PerformClick.run(View.java:11928)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.os.Handler.handleCallback(Handler.java:587)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.os.Handler.dispatchMessage(Handler.java:92)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.os.Looper.loop(Looper.java:132)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at android.app.ActivityThread.main(ActivityThread.java:4025)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at java.lang.reflect.Method.invokeNative(Native Method)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at java.lang.reflect.Method.invoke(Method.java:491)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
12-09 15:00:16.363: ERROR/AndroidRuntime(673): at dalvik.system.NativeStart.main(Native Method)
Mon code est ci-dessous
package com.gcm.fragment;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class GcmFragmentActivity extends Activity implements OnClickListener {
TextView txtIhaveIdea=null;
boolean subMenu=false;
Fragment fragOne = new SubFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtIhaveIdea=(TextView)findViewById(R.id.txtIhaveAnIdea);
txtIhaveIdea.setOnClickListener(this);
;
}
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
if(v.getId()==R.id.txtIhaveAnIdea)
{
if(!subMenu)
{
/*Bundle arguments = new Bundle();
arguments.putBoolean("shouldYouCreateAChildFragment", true);
fragOne.setArguments(arguments); */
//ft.show(fragOne);
fm.beginTransaction();
ft.add(R.id.main_frag_container, fragOne);
ft.commit();
subMenu=true;
}
else if(subMenu)
{
fm.beginTransaction();
ft.remove(fragOne);
ft.commit();
/*fm.beginTransaction();
ft.replace(R.id.main_frag_container, null);
ft.commit();*/
subMenu=false;
//ft.hide(fragOne);
//ft.remove(fragOne);
/*FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.beginTransaction();
Fragment fragOne = new SubFragment();
Bundle arguments = new Bundle();
arguments.putBoolean("shouldYouCreateAChildFragment", true);
fragOne.setArguments(arguments);
ft.remove(fragOne);
ft.commit(); */
}
}
}
}
/*FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.beginTransaction();
Fragment fragOne = new MyFragment();
Bundle arguments = new Bundle();
arguments.putBoolean("shouldYouCreateAChildFragment", true);
fragOne.setArguments(arguments);
ft.add(R.id.main_frag_container, fragOne);
ft.commit();
*/
quelqu'un peut dire comment résoudre le problème
Grâce
OriginalL'auteur kumar | 2011-12-09
Vous devez vous connecter pour publier un commentaire.
Faire ft une variable locale, et non pas un niveau de classe de la variable
Merci. Votre conseil a résolu mon problème. Mais pouvez-vous dire le concept derrière cela ou n'importe quel site de référence qui peut m'aider?
OK. J'ai trouvé que s'engager a déjà été effectuée sur le niveau de la classe de la variable FragmentTransaction. Allez, un autre fragment de ne pas détruire cet objet et de l'appel de commettre à nouveau les causes du problème. Droit?
oui, c'est correct,
Donc, à chaque fois que je dois mettre en place une animation personnalisée droit?
OriginalL'auteur Rajdeep Dua