Eu tenho que alternar entre dois layouts com frequência. O erro está ocorrendo no layout postado abaixo.
Quando meu layout é chamado pela primeira vez, não ocorre nenhum erro e está tudo bem. Quando eu chamo um layout diferente (em branco) e depois chamo meu layout pela segunda vez, ele gera o seguinte erro:
> FATAL EXCEPTION: main
> java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Meu código de layout é assim:
tv = new TextView(getApplicationContext()); // are initialized somewhere else
et = new EditText(getApplicationContext()); // in the code
private void ConsoleWindow(){
runOnUiThread(new Runnable(){
@Override
public void run(){
// MY LAYOUT:
setContentView(R.layout.activity_console);
// LINEAR LAYOUT
LinearLayout layout=new LinearLayout(getApplicationContext());
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
// TEXTVIEW
layout.addView(tv); // <========== ERROR IN THIS LINE DURING 2ND RUN
// EDITTEXT
et.setHint("Enter Command");
layout.addView(et);
}
}
}
Sei que essa pergunta já foi feita antes, mas não ajudou no meu caso.
java
android
android-edittext
textview
parent-child
blackst0ne
fonte
fonte
LinearLayout
mas você adicionaTextView
. Então conserte.TranstitionManager.beginDelayedTransition
, por favor, verifique minha resposta aquiRespostas:
A mensagem de erro diz o que você deve fazer.
fonte
basta passar o argumento attachtoroot como false
fonte
attachToRoot
= false, é o caminho a percorrer.Eu vim aqui pesquisando o erro com minha visão de reciclagem, mas a solução não funcionou (obviamente). Escrevi a causa e a solução para ela em caso de reciclagem. Espero que ajude alguém.
O erro é causado se
onCreateViewHolder()
o seguinte método for seguido:Em vez disso, deve ser
fonte
Eu recebi esta mensagem ao tentar confirmar um fragmento usando o anexo para raiz como verdadeiro em vez de falso, da seguinte forma:
Depois de fazer:
Funcionou.
fonte
Se outra solução não estiver funcionando como:
verifique o que você está retornando do onCreateView do fragmento. É uma visualização ou grupo de visualizações único? no meu caso, eu tinha o viewpager na raiz do xml do fragmento e estava retornando o viewpager, quando adicionei o viewgroup no layout, não atualizei que eu tinha que retornar o viewgroup agora, não o viewpager (view).
fonte
frameLayout.addView (bannerAdView); <----- se você receber erro nesta linha, faça o seguinte abaixo ..
fonte
Meu erro foi definir a visualização da seguinte maneira:
Faltava:
fonte
No meu caso, o problema foi causado pelo fato de eu estar inflando o View pai com o
<merge>
layout. Nesse caso,addView()
causou o acidente.A remoção
addView()
ajudou a resolver o problema.fonte
verifique se você já adicionou a visualização
fonte
O código abaixo resolveu para mim:
Nota: O erro foi da minha classe de fragmento e, substituindo o método onDestroy como este, eu poderia resolvê-lo.
fonte
fonte
No meu caso, isso acontece quando eu quero adicionar a visualização pelos pais para outra visualização
você deve adicionar a visualização pai como esta
fonte
Você deve primeiro remover a visão filho do pai.
Se seu projeto estiver no Kotlin, sua solução parecerá um pouco diferente do Java. Kotlin simplifica a conversão com
as?
, retornando nulo se o lado esquerdo for nulo ou a conversão falhar.Solução de extensão Kotlin
Se você precisar fazer isso mais de uma vez, adicione esta extensão para tornar seu código mais legível.
Ele não fará nada com segurança se essa Visualização for nula, a visualização pai for nula ou a visualização pai não for um ViewGroup
fonte
Encontrei outra correção:
Aqui, eu só tenho uma instrução if para verificar se o modo de exibição teve um pai e, se não criou o novo diálogo, defina o contentView e mostre o diálogo no meu método "createAlgorithmDialog ()".
Isso também define os botões positivo e negativo (botões ok e cancelar) com onClickListeners.
fonte
Você pode usar esse método para verificar se uma exibição tem filhos ou não.
fonte
Meu caso foi diferente, a visão filho já tinha uma visão pai. Estou adicionando a visão filho dentro da visão pai a um pai diferente. código de exemplo abaixo
E eu estava inflando essa visualização e adicionando a outro LinearLayout, depois removi o LinaarLayout do layout acima e ele começou a funcionar
o código abaixo corrigiu o problema:
fonte
Meu problema está relacionado a muitas das outras respostas, mas um motivo um pouco diferente para a necessidade de fazer a alteração ... Eu estava tentando converter uma atividade em um fragmento. Então, mudei o código inflado de onCreate para onCreateView, mas esqueci de converter de setContentView para o método inflate, e a mesma IllegalStateException me levou a esta página.
Eu mudei isso:
para isso:
Isso resolveu o problema.
fonte