Eu tenho um fragmento que estou tentando adicionar em uma exibição.
FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
.findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();
if (content == null || content.isRemoving()) {
content=new feed_parser_activity(item.getLink().toString());
xaction
.add(R.id.feedContentContainer, content)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null)
.commit();
Log.e("Abstract", "DONE");
}
Quando esse código é executado, recebo o seguinte erro na depuração ..
java.lang.IllegalArgumentException: No view found for id 0x7f080011
for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity
é um fragmento definido como layout de fragmento em xml.
Estou usando um FragmentActivity para hospedar o Layout do Fragmento segurando o feed_parser_layout
.
Estou codificando isso corretamente acima?
android
android-fragments
illegalargumentexception
coder_For_Life22
fonte
fonte
Respostas:
Eu estava tendo esse problema também, até que eu percebi que eu tinha especificado o layout errado
setContentView()
doonCreate()
método da FragmentActivity.O ID passado
FragmentTransaction.add()
, no seu casoR.id.feedContentContainer
, deve ser filho do layout especificado emsetContentView()
.Você não nos mostrou seu
onCreate()
método, então talvez esse seja o mesmo problema.fonte
TextView
dentro de umRelativeLayout
é filho doRelativeLayout
.Este erro também ocorre ao aninhar fragmentos e adicioná-los com getSupportFragmentManager () em vez de getChildFragmentManager ().
fonte
A solução foi usar
getChildFragmentManager()
ao invés de
getFragmentManager()
ao chamar de um fragmento. Se você estiver chamando o método de uma atividade, use
getFragmentManager()
.Isso resolverá o problema.
fonte
getSupportFragmentManager()
lugar.getFragmentManager()
está obsoleto agora!Eu tive esse problema (ao criar minha interface do usuário no código) e foi causado pelo fato de os meus
ViewPager
(que mostravamFragment
s) não terem um conjunto de IDs, então simplesmente useipager.setID(id)
e funcionou.Esta página me ajudou a descobrir isso.
fonte
Outro cenário que conheci. Se você usar fragmentos aninhados, diga um ViewPager em um fragmento com suas páginas também fragmentos.
Quando você faz uma transação Fragment no fragmento interno (página do ViewPager), precisará de
getActivity () é a chave aqui. ...
fonte
No meu caso, eu estava tentando mostrar um DialogFragment contendo um pager e essa exceção foi lançada quando o FragmentPagerAdapter tentou adicionar os fragmentos ao pager. Com base na resposta howettl, acho que foi porque o pai do Pager não era a exibição definida em setContentView () na minha FragmentActivity.
A única alteração que fiz para resolver o problema foi criar o FragmentPagerAdapter transmitindo um FragmentMager obtido chamando getChildFragmentManager (), não o obtido chamando getFragmentManager () como normalmente faço.
fonte
Essa exceção também pode ocorrer se o ID do layout para o qual você está passando
FragmentTransaction.replace(int ID, fragment)
existir em outros layouts que estão sendo inflados. Verifique se o ID do layout é único e deve funcionar.fonte
Uma resposta que li em outro tópico semelhante a este que funcionou para mim quando tive esse problema envolveu o layout xml.
Seu logcat diz "Nenhuma visualização encontrada para o ID 0x7f080011".
Abra o
gen->package->R.java->id
e, em seguida, procure pelo ID0x7f080011
.Quando tive esse problema, esse ID pertencia a um
FrameLayout
no meuactivity_main.xml
arquivo.O FrameLayout não tinha um ID (não havia declaração
android:id = "blablabla"
).Verifique se todos os seus componentes em todos os seus layouts possuem IDs, principalmente o componente citado no logcat.
fonte
Eu recebi esse erro quando atualizei de
com.android.support:support-v4:21.0.0
paracom.android.support:support-v4:22.1.1
.Eu tive que mudar meu layout com isso:
Para isso:
Portanto, o layout DEVE ter uma visão infantil. Estou assumindo que eles aplicaram isso na nova biblioteca.
fonte
Com fragmentos aninhados
Para mim, usando em
getChildFragmentManager()
vez degetActivity().getSupportFragmentManager()
falha resolvidafonte
Sei que isso já foi respondido em um cenário, mas meu problema era um pouco diferente e pensei em compartilhar caso mais alguém esteja no meu lugar.
Eu estava fazendo uma transação no interior
onCreate()
, mas, neste momento, a árvore da visualização não foi inflada e, portanto, você recebe o mesmo erro. Colocar o código da transaçãoonResume()
fez tudo correr bem.Portanto, verifique se o código da transação é executado depois que a árvore de exibição foi inflada!
fonte
onAttach
. Veja minha respostaEu estava enfrentando um erro desagradável ao usar o Viewpager no Recycler View. Abaixo erro que eu enfrentei em uma situação especial. Iniciei um fragmento que tinha um RecyclerView com Viewpager (usando FragmentStatePagerAdapter). Funcionou bem até que eu mudei para um fragmento diferente ao clicar em uma célula no RecyclerView e naveguei de volta usando o botão Voltar do hardware do telefone e o aplicativo travou.
E o engraçado é que eu tinha dois Viewpagers no mesmo RecyclerView e ambos estavam a cerca de 5 células de distância (outros não estavam visíveis na tela, estavam em baixo). Então, inicialmente eu apenas apliquei a solução no primeiro Viewpager e deixei a outra como está (Viewpager usando fragmentos).
A navegação de volta funcionou bem, quando o pager da primeira visualização estava visível. Agora, quando eu rolei para o segundo e depois troquei o fragmento e voltei, ele caiu (a mesma coisa aconteceu com o primeiro). Então eu tive que mudar os dois Viewpagers.
De qualquer forma, leia abaixo para encontrar a solução de trabalho. Erro de falha abaixo:
Passou horas depurando-o. Leia esta postagem completa do Thread até a parte inferior, aplicando todas as soluções, incluindo a certeza de que estou passando childFragmentManager.
Nada funcionou.
Finalmente, em vez de usar o FragmentStatePagerAdapter, estendi o PagerAdapter e o usei no Viewpager sem Usar fragmentos. Eu acredito que alguns onde há um erro com fragmentos aninhados. Enfim, temos opções. Ler ...
O link abaixo foi muito útil:
Viewpager sem fragmentos
O link pode morrer, por isso estou postando minha solução implementada aqui abaixo:
}
ESPERANÇA isso foi útil !!
fonte
Eu tive o mesmo problema, mas estava ocorrendo um problema de mudança de orientação. Nenhuma das outras soluções funcionou. Por isso, esqueci de remover
setRetainInstance(true);
meus fragmentos ao fazer um layout de dois ou um painel com base no tamanho da tela.fonte
Meu erro foi no
FragamentTransaction
.Eu estava fazendo isso em
t.replace(R.layout.mylayout);
vez det.replace(R.id.mylayout);
A diferença é que um é o layout e o outro é uma referência ao
layout(id)
fonte
Apenas no caso de alguém cometer o mesmo erro estúpido que eu; verifique se você não está substituindo o conteúdo da atividade em algum lugar (por exemplo, procure chamadas adicionais para setContentView)
No meu caso, devido à cópia e colagem descuidadas, usei DataBindingUtil.setContentView no meu fragmento, em vez de DataBindingUtil.inflate, que atrapalhava o estado da atividade.
fonte
Eu tive esse mesmo problema, deixe-me postar meu código para que todos possam vê-lo e não fazer a mesma coisa que eu fiz.
Observe que eu estava configurando fragmentos antes de eu
setContentView
. Opa.fonte
setContentView
dentro do meuonBuildHeaders
Esta página parece ser um bom local central para postar sugestões sobre o Fragment IllegalArgumentException. Aqui está mais uma coisa que você pode tentar. Isto é o que finalmente funcionou para mim:
Eu tinha esquecido que tinha um arquivo de layout separado para orientação da paisagem. Depois de adicionar meu contêiner FrameLayout, também, o fragmento funcionou.
Em uma nota separada, se você já tentou todo o resto sugerido nesta página (e toda a Internet também) e tem arrancado seus cabelos há horas, considere apenas despejar esses fragmentos irritantes e voltar para um bom e antigo layout padrão. (Na verdade, era isso que eu estava fazendo quando finalmente descobri o meu problema.) Você ainda pode usar o conceito de contêiner. No entanto, em vez de preenchê-lo com um fragmento, você pode usar a
include
tag xml para preenchê-lo com o mesmo layout que você usaria em seu fragmento. Você pode fazer algo assim no seu layout principal:onde
former_fragment_layout
é o nome do arquivo de layout xml que você estava tentando usar no seu fragmento. Consulte Reutilizando layouts com include para obter mais informações.fonte
No meu caso, eu tinha um SupportMapFragment em um item de exibição de reciclador (eu estava usando a sobrecarga inferior "liteMode", que faz o mapa parecer não interativo, quase como uma imagem estática). Eu estava usando o FragmentManager correto, e tudo parecia funcionar bem ... com uma pequena lista. Depois que a lista de itens excedeu um pouco a altura da tela, comecei a receber esse problema ao rolar.
Acontece que foi porque eu estava injetando um SupportMapFragment dinâmico dentro de uma visualização, que estava dentro de outro fragmento, para solucionar alguns problemas que eu estava tendo ao tentar declará-lo estaticamente no meu XML. Por esse motivo, o layout do espaço reservado do fragmento só pode ser substituído pelo fragmento real depois que a visualização for anexada à janela, ou seja, visível na tela. Então, eu coloquei meu código para inicializar o SupportMapFragment, substituir o fragmento e chamar getMapAsync () no evento onAttachedToWindow.
O que eu esqueci de fazer foi garantir que meu código não fosse executado duas vezes. Ou seja, no evento onAttachedToWindow, verifique se meu dinâmico SupportMapFragment ainda estava nulo antes de tentar criar uma nova instância e fazer uma substituição de fragmento. Quando o item sai da parte superior do RecyclerView, ele é desanexado da janela e, em seguida, reconectado quando você volta para ele, para que esse evento seja disparado várias vezes.
Depois de adicionar a verificação nula, isso aconteceu apenas uma vez por item do RecyclerView e o problema desapareceu! TL; DR!
fonte
Isso acontece quando você está chamando de um fragmento dentro de outro.
usar :
fonte
Encontrei esse problema ao tentar substituir o modo de exibição pelo meu fragmento em
onCreateView()
. Como isso:Me disse
Corrigi esse problema colocando a substituição
onActivityCreated()
. Como isso:onCreateView()
para poder substituí-la mais tardeonActivityCreated()
Espero que isto ajude!
fonte
Corrigi esse bug, uso a
commitNow()
substituiçãocommit()
.O
commitNow
é um método de sincronização, ocommit()
método é um método assíncrono.fonte
No meu caso, essa exceção foi lançada quando eu usei IDs diferentes para o mesmo elemento de layout (espaço reservado para fragmento), tendo vários deles para diferentes variantes de compilação. Por alguma razão, ele funciona perfeitamente bem quando você está substituindo um fragmento pela primeira vez, mas se você tentar fazer isso novamente, receberá esta exceção. Portanto, verifique se você está usando o mesmo ID se tiver vários layouts para diferentes variantes de compilação.
fonte
Se você está tentando substituir um fragmento dentro de um fragmento pelo
fragmentManager
mas não está inflando o fragmento pai que pode causar um problema.Em BaseFragment.java
OnCreateView
:Substitua
super.onCreateView(inflater, container, savedInstanceState);
por inflar o layout correto para o fragmento:fonte
Eu tive o mesmo problema quando estava fazendo transações de fragmentos durante a criação da atividade.
O principal problema é o que Nick já apontou - a árvore de visualização ainda não foi inflada. Mas sua solução não funcionou - a mesma exceção em onResume, onPostCreate etc.
A solução é adicionar retorno de chamada ao fragmento do contêiner para sinalizar quando estiver pronto:
E então em atividade:
fonte
No meu caso, eu estava usando um arquivo de classe de fragmento para declarar uma classe de adaptador listview. Acabei de usar um arquivo diferente para a classe do adaptador público e o erro se foi.
fonte
Esse problema também ocorre quando você não coloca o
<include layout="@layout/your_fragment_layout"/>
seuapp_bar_main.xml
fonte
Isso acontece também quando você tem duas visualizações em dois fragmentos com os mesmos IDs
fonte
Eu tive o mesmo problema que foi causado porque tentei adicionar fragmentos antes de adicionar o layout do contêiner à atividade.
fonte
Às vezes, é porque você está usando um BottomNavigationView. Se você abrir um Intent a partir da navegação e nessa atividade você abrir um fragmento, digamos
a atividade não poderá encontrar o método de navegação que você está usando.
SOLUÇÃO: altere a atividade para fragmentar e manipular a navegação com addOnBackStack no seu aplicativo. Se você implementou o Jetpack Navigation, use fragmentos no seu projeto.
fonte
No meu caso. Eu tenho um
Activity
com serveralFragment
s algum tempo eu preciso recriarFragment
s quandoLimpo todos os
Fragment
e defino tudo comonull
em atividade, mas o Fragment já se cria, enquanto ele hospeda activty é bean set null, portanto, antes de chamar o Fragment view, verifique-o nulopor exemplo
fonte