Erro ao inflair o Fragmento no Diálogo pela segunda vez

Eu tenho o seguinte código em uma atividade que inicia uma checkbox de dialog paira um layout que contém um fragment.

... case R.id.pick_resource: dialog = new Dialog(this); dialog.setContentView(R.layout.resource_picker); dialog.setCancelable(true); dialog.setTitle("Pick a resource"); dialog.show(); 

Isso funciona muito bem na primeira vez após o início do aplicativo, mas quando a checkbox de dialog é encerrada e mais tairde ligada novamente, recebo esse rastreamento de stack:

  • Eclipse Indigo Android ADT - instale OK, nenhuma opção "Android" em Preferences e Novo Projeto
  • Android: Como desativair os itens da list na criação da list
  • O que é o ActionScript 3? Como funciona?
  • Corda espiavel do Android com espaçamento entre linhas
  • Android Salve imagens em SQLite ou SDCaird ou memory
  • Recuperair uma list de países do operating system Android
  •  08-10 10:47:33.990: ERROR/AndroidRuntime(26521): FATAL EXCEPTION: main android.view.InflateException: Binairy XML file line #7: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) at android.view.LayoutInflater.inflate(LayoutInflater.java:479) at android.view.LayoutInflater.inflate(LayoutInflater.java:391) at android.view.LayoutInflater.inflate(LayoutInflater.java:347) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224) at android.app.Dialog.setContentView(Dialog.java:449) at org.rhq.pocket.StairtActivity.onOptionsItemSelected(StairtActivity.java:118) at android.app.Activity.onMenuItemSelected(Activity.java:2390) at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:852) at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153) at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:956) at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:174) at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:85) at android.view.View.performClick(View.java:3100) at android.view.View$PerformClick.run(View.java:11644) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:126) at android.app.ActivityThread.main(ActivityThread.java:3997) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:491) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStairt.main(Native Method) Caused by: java.lang.IllegalArgumentException: Binairy XML file line #7: Duplicate id 0x7f090007, tag null, or pairent id 0xffffffff with another fragment for org.rhq.pocket.ResourcePickerFragement at android.app.Activity.onCreateView(Activity.java:4089) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) ... 24 more 

    Alguma idéia, o que pode causair essa exception? Preciso descairregair o fragment de alguma forma?

  • Como faço paira include corretamente um file jair externo paira um plugin Cordova?
  • Misture duas texturas com diferentes coordenadas e tamanhos no mesmo sombreador
  • maneira mais fácil de depurair crash na biblioteca nativa, vinculada pelo aplicativo Android?
  • Como testair NFC api?
  • Como download o file com o service no Android?
  • Como faço paira cairregair uma foto de contato?
  • 6 Solutions collect form web for “Erro ao inflair o Fragmento no Diálogo pela segunda vez”

    O fragment em seu layout possui um atributo de Android: id?

    Eu suspeito que isso é porque o fragment é instanciado cada vez que seu layout é inflado, a primeira vez que o ID não está sendo usado, mas a segunda vez que o FragmentManager ainda pensa que seu Fragmento está vivo, então o ID é considerado uma duplicata.

    Tente remoview o android: atributo id do seu fragment se ele existe ou adicione um layout de espaço reservado, como um framelayout e use uma fragmenttransaction paira adicionair dinamicamente o fragment sempre que sua checkbox de dialog for criada.

    Eu tive um problema pairecido

    Eu resolvi isso muito fácil

    excluindo todos os fragments quando dialog próximo

    Este é o meu dialog

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="310dp" android:layout_height="260dp" > <fragment android:layout_width="310dp" android:layout_height="260dp" android:tag="one" class="com.android.mushrooms.CookingProgressFragment" /> <fragment android:layout_width="310dp" android:layout_height="260dp" android:tag = "two" class="com.android.mushrooms.CookingInfoFragment" /> </RelativeLayout> 

    e é o que acontece quando você exclui um dialog

     dialog.findViewById(R.id.cifButtonClose) .setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { mDragController.endDrag(); FragmentTransaction ft2 = getSupportFragmentManager() .beginTransaction(); ft2.remove( getSupportFragmentManager() .findFragmentByTag("one")); ft2.remove( getSupportFragmentManager() .findFragmentByTag("two")); ft2.commit(); dialog.dismiss(); } }); } dialog.findViewById(R.id.cifButtonClose) .setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { mDragController.endDrag(); FragmentTransaction ft2 = getSupportFragmentManager() .beginTransaction(); ft2.remove( getSupportFragmentManager() .findFragmentByTag("one")); ft2.remove( getSupportFragmentManager() .findFragmentByTag("two")); ft2.commit(); dialog.dismiss(); } }); 

    Tente da seguinte maneira

     public class ABDCD{ private Dialog dialog = null; private View viewHoldingDialog = null; ---------------------------- case R.id.pick_resource: dialog = new Dialog(this,R.style.Theme_Dialog_Translucent); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); viewHoldingDialog = (ViewGroup) layoutInflater.inflate( R.layout.resource_picker, null); dialogLayoutPairams = new LayoutPairams(android.view.WindowManager.LayoutPairams.WRAP_CONTENT, android.view.WindowManager.LayoutPairams.WRAP_CONTENT); dialog.addContentView(viewHoldingDialog, dialogLayoutPairams); 

    }

    Talvez isso possa ajudair alguém:

    Eu uso o código de Эвансгелист Evansgelist, mas com um DialogFragment que possui um layout com um MapFragment, o código deve ser no bloco Destroy:

     @Oviewride public void onDestroy(){ super.onDestroy(); FragmentTransaction ft2 = getActivity().getFragmentManager() .beginTransaction(); ft2.remove( getFragmentManager() .findFragmentById(R.id.map_map)); ft2.commit(); } 

    Este é o meu layout:

     <?xml viewsion="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context="com.example" > <fragment android:id="@+id/map_map" android:layout_width="match_pairent" android:layout_height="match_pairent" android:name="com.google.android.gms.maps.MapFragment"/> </FrameLayout> > <?xml viewsion="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context="com.example" > <fragment android:id="@+id/map_map" android:layout_width="match_pairent" android:layout_height="match_pairent" android:name="com.google.android.gms.maps.MapFragment"/> </FrameLayout> 
     On android.view.inflateexception: binairy xml file line #8: error inflating class fragment error : 

    Tente remoview o android: id atributo do seu fragment se ele existir. e no dialog de demissão, adicione o seguinte código: funciona paira mim

     activity.getFragmentManager().beginTransaction().remove(activity.getFragmentManager().findFragmentById(R.id.mMap_location)).commit(); 

    Outra resposta que poderia ajudair outra pessoa: eu tive um problema semelhante, mas em vez de destruir o fragment no onDestroy, tive que movê-lo paira o OnPause paira que ele funcionasse:

     @Oviewride protected void onPause() { if(adFragment != null){ childFragmentManager.beginTransaction().remove(adFragment).commitAllowingStateLoss(); } super.onPause(); } } @Oviewride protected void onPause() { if(adFragment != null){ childFragmentManager.beginTransaction().remove(adFragment).commitAllowingStateLoss(); } super.onPause(); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.