Estou usando fragmentos, quando instanciarei um fragmento pela primeira vez. mas na segunda vez recebi essa exceção. Não consegui encontrar a linha onde encontrei o erro.
04-04 08:51:54.320: E/AndroidRuntime(29713): FATAL EXCEPTION: main
04-04 08:51:54.320: E/AndroidRuntime(29713): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addViewInner(ViewGroup.java:3013)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2902)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2859)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2839)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.NoSaveStateFrameLayout.wrap(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.BackStackRecord.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.handleCallback(Handler.java:587)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Handler.dispatchMessage(Handler.java:92)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.os.Looper.loop(Looper.java:132)
04-04 08:51:54.320: E/AndroidRuntime(29713): at android.app.ActivityThread.main(ActivityThread.java:4126)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invokeNative(Native Method)
04-04 08:51:54.320: E/AndroidRuntime(29713): at java.lang.reflect.Method.invoke(Method.java:491)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
04-04 08:51:54.320: E/AndroidRuntime(29713): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
04-04 08:51:54.320: E/AndroidRuntime(29713): at dalvik.system.NativeStart.main(Native Method)
Aqui estão o que eu faço quando clico em um elemento do fragmento da minha lista.
// If we are not currently showing a fragment for the new
// position, we need to create and install a new one.
RouteSearchFragment df = RouteSearchFragment.newInstance(index);
// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.details_full, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
A primeira vez que está tudo bem, clico em element2 da lista, também está ok; mas quando eu volto para element1 eu tenho esse bug.
Obrigado a todos!
android
android-layout
android-fragments
Haythem Souissi
fonte
fonte
Respostas:
Quando você substitui
OnCreateView
em suaRouteSearchFragment
classe, você tem osegmento de código?
Nesse caso, remover a instrução de retorno deve resolver seu problema.
Você pode manter o código e retornar a visualização se não quiser regenerar os dados da visualização, e o método onDestroyView () você remove esta visualização de seu pai assim:
fonte
return inflater.inflate(R.layout.fragment_search, container);
porreturn inflater.inflate(R.layout.fragment_search, container, false);
Desculpe postar uma pergunta antiga, mas consegui corrigi-la usando uma solução totalmente diferente. Eu estava recebendo essa exceção, mas mudei a primeira linha da minha substituição onCreatView:
...para isso:
Não tenho ideia do porquê, mas usar a substituição que aceita o booleano como o terceiro parâmetro corrigiu. Acho que diz ao Fragment e / ou Activity para não usar o "container" como o pai da View recém-criada.
fonte
Eu tenho enfrentado esse problema muitas vezes. Adicione o seguinte código para resolver este problema:
obrigado
fonte
Se você tem esta declaração ..
Então tente isso .. Adicione false como terceiro argumento .. Pode ser que possa ajudar ..
fonte
Eu tinha esse código em um fragmento e ele estava travando se eu tentasse voltar a este fragmento
depois de reunir as respostas neste tópico, percebi que o pai do mRootView ainda tem mRootView como filho. Então, essa foi a minha solução.
espero que isto ajude
fonte
Isso também acontece quando a visualização retornada por onCreateView () não é a visualização que foi inflada.
Exemplo:
Consertar:
Ao invés de:
fonte
Tive esse problema e não consegui resolvê-lo no código Java. O problema era com meu xml.
Eu estava tentando adicionar um textView a um contêiner, mas tinha envolvido o textView dentro de um LinearLayout.
Este era o arquivo xml original:
Agora com o LinearLayout removido:
Isso não parecia muito para mim, mas funcionou, e eu não mudei meu código Java. Estava tudo no xml.
fonte
Você está adicionando um
View
em umlayout
, mas a visualização já está em outrolayout
. Uma visualização não pode estar em mais de um lugar.fonte
Esta solução pode ajudar:
fonte
Eu resolvi, definindo
attachToRoot
deinflater.inflate()
afalse
.fonte
em seu arquivo xml, você deve definir layout_width e layout_height de wrap_content para match_parent. está consertado para mim.
fonte