Eu recebo o erro
Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
quando alterno pelo modo retrato e paisagem. Estou usando fragmentos. Meu xml é:
<LinearLayout android:id="@+id/mainLayout"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ListView android:id="@+id/android:list"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
<fragment android:id="@+id/fragmentDetails"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
class="de.androidbuch.activiti.task.TaskDetailsFragment"/>
</LinearLayout>
Se eu mudar pelo modo paisagem e retrato, tudo funcionará bem. Mas quando clico no meu fragmento (e consigo ver o meu fragmento) e depois alterno para o outro modo, recebo o erro. Alguma idéia de como eu posso resolver isso? Encontrei algumas respostas aqui, mas nenhuma delas me ajudou ...
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): ... 12 more
Respostas:
Como o hdemirchian disse, certifique-se de usar:
E também verifique se a Atividade que está usando o (s) fragmento (s) se estende em
FragmentActivity
vez do regularActivity
,para pegar a
FragmentActivity
aula.fonte
A exceção
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
pode acontecer se você manipulargetActivity()
dentro do seu fragmento antes deonActivityCreated()
ser chamado. Nesse caso, você recebe uma referência de atividade incorreta e não pode confiar nela.Por exemplo, o próximo padrão está errado:
Padrão correto # 1
Padrão correto # 2
fonte
getActivity()
dentroonActivityCreated()
ou em qualquer método de ciclo de vida subsequente, mas antesonDestroyView()
.Verifique se o seu
Activity
estendeFragmentActivity
.fonte
Eu tive o mesmo erro. Eu estava cavando o dia todo, não sei, mas acho que tentei ~ 25 soluções para esse problema. Nenhum funcionou até às 02:00, descobri que estava faltando essa linha no manifesto de aplicativos xml:
Essa linha estava dentro da
<application>
etiqueta. Eu realmente espero que isso ajude alguém. GL.fonte
Eu tive o mesmo problema. A solução para mim foi a ordem de super.onCreate e setContentView dentro do FragmentActivity
A ordem a seguir funciona bem:
fonte
super
sempre deve ser chamado no início do método.super.method()
deve ser chamado primeiro. Depende do que o método da superclasse faz. No casoFragmentActivity
, faz alguma inicialização necessária para fazer osetContentView
trabalho corretamente. No entanto, em outro método (digamosonKeyUp
), você pode querer fazer algum trabalho condicional com a ação, mas,super.onKeyUp
nesse caso, você provavelmente desejará chamarsuper.onKeyUp
no final da função.super()
(o construtor da superclasse) deve ser a primeira função chamada em qualquer construtor de classes filho, no entanto, chamá-lo não é necessariamente obrigatório (dependeria inteiramente da extensão da classe).Fragmentos não podem ser aninhados em XML
Aprendi isso da maneira mais difícil - se você aninhar uma
<fragment>
tag baseada em layout XML dentro de um fragmento (potencialmente) carregado dinamicamenteFragmentManager
, então você começa a receber erros estranhos, tentando aumentar o seu fragmento xml.Acontece que isso não é suportado - funcionará bem se você fizer isso apenas com a
FragmentManager
abordagem.Eu estava tendo esse problema porque estava tentando carregar um fragmento dentro de um
<DrawerLayout>
xml, e isso estava causando uma falha noonCreateView()
método quando coloquei a pilha de trás.fonte
appcompat-v7:23.3.0
<fragment>
por<frameLayout>
trabalhado. Eu ainda estou descobrindo. - stackoverflow.com/a/19167009/5477548Eu estava tendo o mesmo problema que você está enfrentando. Nenhuma das dicas no topo me ajudou. Mais tarde, descobri que tudo o que precisava fazer era corrigir minhas importações de:
para:
fonte
Você tentou:
fonte
Verifique se não há nenhuma exceção gerada no método onCreateView do fragmento. Se alguma exceção for gerada nesse método, o logcat não mostrará detalhes exatos da exceção, mas sempre exibirá a mensagem:
fonte
Se você estiver
TaskDetailsFragment
estendendoandroid.app.Fragment
, mudeonCreateView()
.Retorne sua visualização que deseja mostrar no Fragmento ou converta seu Layout para visualização usando LayoutInflater e retorne-o.
Espero que isso funcione. :)
fonte
Verifique o caminho da classe; pode ser que o inflador de visualização não encontre sua definição de classe, conforme definido em seu xml class = "de.androidbuch.activiti.task.TaskDetailsFragment" o caminho acima pode estar errado.
fonte
Eu estava recebendo esse erro por diferentes razões.
Passos para reproduzir:
~> Meu problema foi que eu criei um novo aplicativo em branco.
~> Eu gerei um fragmento personalizado no menu Arquivo ~> Novo arquivo.
~> Prosseguiu para personalizar o fragmento adicionando layouts e botões, etc.
~> Referenciei o novo fragmento customizado no activity_my.xml gerado automaticamente, que foi gerado para mim ao criar o aplicativo. Fazer isso permitiu que o XML gerasse os objetos para mim.
Aqui está o problema ao gerar o fragmento personalizado através do menu Arquivo ~> Novo arquivo, ele gera automaticamente um esboço de função de interface e o coloca na parte inferior do arquivo de classe de fragmento.
Isso significa que sua classe MyActivity deve implementar essa interface. Caso contrário, o erro acima ocorre apenas ao fazer referência ao fragmento do xml. Removendo completamente a referência para o fragmento no XML e criando o fragmento através do código no arquivo de classe MyActivity.java, o Logcat gera um erro mais conciso, explicando o problema em detalhes e reclamando da interface. Isso é demonstrado na atividade do modelo de projeto + fragmento. Embora esse modelo de projeto não gere o stub da interface.
fonte
Para mim, foi depois de rolar o rastreamento de pilha que encontrei na falta da permissão para android.permission.ACCESS_NETWORK_STATE
depois de adicionar essa permissão, foi corrigido
fonte
Se você tiver arquivos de layout separados para os modos retrato e paisagem e estiver recebendo um erro de inflação sempre que alterar a orientação após clicar em um item, é provável que haja uma discrepância entre os arquivos de layout.
Quando você recebe o erro, é apenas quando você clica no item no modo paisagem ou apenas no modo retrato ou em ambos? Sua atividade TaskDetailsFragment usa um arquivo de layout que pode ter discrepâncias entre os modos paisagem e retrato?
fonte
Se você está adicionando
Fragment
estaticamente, ou seja, em xml, pode ter perdido a implementaçãoOnFragmentInteractionListener
em suaActivity
classe. Em seguida, a implementação da interface resolveria o problema. Se você estiver adicionandoFragment
dinamicamente, ou seja, na classe java, essa não é a solução. Como o próprio IDE não permitirá que você continue sem implementar as interfaces necessárias.fonte
Meu problema nesse caso foi uma instância simples de ter uma exceção de ponteiro nulo idiota em um dos meus métodos que estava sendo chamado mais tarde no ciclo de vida. Isso estava causando a exceção "Erro ao inflar fragmento de classe" para mim. Resumindo, lembre-se de verificar mais adiante o rastreamento da pilha de exceções para uma possível causa.
Depois que eu resolvi a exceção do ponteiro nulo, meu fragmento carregou bem.
fonte
Nenhuma das soluções mencionadas acima me ajudou. No log, pude encontrar os detalhes da exceção, conforme mencionado abaixo:
Eu fiz isso e meu código estava funcionando!
fonte
Se você não quiser alterar nada e usar a tag " fragment "
faça isso,
fonte
Tinha o mesmo tipo de erro, onde exatamente a mesma mensagem de erro no logcat era exibida. Eu precisava fazer alterações no Java Build Path localizado em
Project->Properties
. Eu incluí bibliotecas relacionadas ao Google Maps comoandroid-support-v4.jar
egoogle-play-services.jar
; no entanto eu estava perdendo incluindo estes no'Build class path'
no'Order and Export'
menu de opções. Talvez o erro esteja aqui.Tente incluir bibliotecas no caminho da classe de construção.
A ordem em que as classes são construídas também pode disparar o erro, portanto, meu conselho é também tentar reorganizar a ordem do caminho da construção. O erro desapareceu quando eu usei a seguinte ordem:
'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
. A última unidade contém os arquivos jar mencionados anteriormente.fonte
No seu arquivo xml, basta usar um em vez da tag. O inflator tenta criar um android.app.Fragment a partir do qual falhará na API <10. Portanto, você precisa criar um grupo de visualizações de um tipo diferente.
fonte
Eu recebi esse erro ao usar um ListFragment, mas o ID do modo de exibição de lista era listView1 em vez de list.
'Seu conteúdo deve ter um ListView cujo atributo de ID seja' android.R.id.list ''
http://developer.android.com/reference/android/app/ListFragment.html
fonte
certifique-se de que você tenha usado este
isso não..
fonte
Só tive esse mesmo erro. A razão para a minha foi a visibilidade da minha classe de fragmento. Foi definido como padrão, deve ser público.
fonte
Você poderia postar os fragmentos
onCreate
eonCreateView
métodos? Eu tinha exatamente a mesma exceção que foi causada por uma exceção noonCreate
método fragment , quando corrigi esse problema, ele corrigiu o fragmento de classe inflado por erro.fonte
Eu estava recebendo esse erro no android studio, o problema era que meu fragmento tinha um layout relativo enquanto o código na função OnCreateView era
seu código está fazendo a mesma coisa?
fonte
Se você deseja herdar o AppCompatActivity , pode fazer algo assim: no xml da atividade, use um FrameLayout como este:
e na atividade
onCreate
-fonte
Eu recebi o mesmo erro, mas meu problema era que meu fragmento não tinha um ID no layout xml da atividade pai.
fonte
Depois de um dia de luta, encontrei alguma verificação de cenário: você está enfrentando o mesmo,
Nota - não adicione duas chaves no arquivo de manifesto remova a chave do mapa
código acima e adicione esse código.
fonte
Eu tive um problema parecido; depois de executar o exemplo da AdMob , tentei inserir anúncios no meu aplicativo, causando este erro:
A solução é: você não pode inserir o fragmento de um anúncio em uma ListActivity. Em vez disso, eu poderia adicioná-lo a um FragmentActivity e a um ActionBarActivity sem nenhum problema.
Minha sugestão é: comece pelo exemplo da AdMob e adicione seu aplicativo existente: eu economizaria muito tempo !!!
fonte
Se você usar ofuscação com o componente Navegação, precisará excluir o fragmento do android e seus argumentos. Inclua estas linhas nos arquivos de regras do programa:
fonte