Eu tenho um erro muito frustrante que não consigo explicar. Eu criei um aplicativo Android que usa Android AppCompat
para torná-lo compatível com versões mais antigas. Aqui está o meu principal arquivo de layout de atividade:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.fragment.NavigationDrawerFragment" />
</android.support.v4.widget.DrawerLayout>
E aqui está o código principal da minha atividade:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
O principal problema aqui é: o código acima funciona sem problemas em quase dispositivos (dispositivo estimulado ou alguns dispositivos reais). Mas quando eu executá-lo no Samsung S3. Ele percebe este erro:
java.lang.RuntimeException: Unable to start activity ComponentInfo{view.MainActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
at android.app.ActivityThread.access$700(ActivityThread.java:134)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4856)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
at android.app.Activity.setContentView(Activity.java:1901)
at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:208)
at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:111)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
Por favor, diga-me como corrigir erro, obrigado :)
Respostas:
Depois de muito tempo para depuração, corrigi esse problema. (Embora eu ainda não possa explicar o porquê). Que eu mudo de propriedade
android:name
paraclass
. (embora no Android Document, eles digam que essas propriedades são iguais, mas funciona !!!)Portanto, ele deve mudar de:
para
Portanto, o novo layout deve ser:
Espero que esta ajuda :)
fonte
android:id
paraclass
) funcionou para mim. Eu também tenho um aviso Lint à mudançaFragment
parafragment
que eu fiz.name
paraclass
, alguns usuários relataram essa falha, mas não consigo reproduzi-la pessoalmente!Não consegui resolver o meu problema usando as respostas fornecidas. Finalmente mudei isso:
para isso :
,
e funciona.
Se você o estiver usando dentro de um fragmento, use getChildFragmentManager em vez de getSupportFragmentManager .
fonte
TL / DR : ocorreu uma exceção durante a criação de um fragmento referenciado a partir de um XML de layout de nível superior. Essa exceção causou falha na inflação do layout de nível superior, mas a exceção inicial não foi relatada ; somente a falha de inflação de nível superior aparece no rastreamento da pilha. Para encontrar a causa raiz, você deve capturar e registrar a exceção inicial .
A causa inicial do erro pode ser uma grande variedade de coisas, e é por isso que existem tantas respostas diferentes aqui sobre o que corrigiu o problema para cada pessoa. Para alguns, ele tinha a ver com os
id
,class
ouname
atributos. Para outros, foi devido a um problema de permissões ou uma configuração de compilação. Para mim, aqueles não resolveram o problema; em vez disso, havia um recurso desenhável que existia apenas emdrawable-ldrtl-xhdpi
, e não em um local aplicável comodrawable
.Mas esses são apenas detalhes. O problema geral é que a mensagem de erro exibida no logcat não descreve a exceção que iniciou tudo. Quando um XML de layout de nível superior faz referência a um fragmento, o fragmento
onCreateView()
é chamado. Quando ocorreonCreateView()
uma exceção no fragmento (por exemplo, ao inflar o XML do layout do fragmento), ocorre uma falha na inflação do XML do layout de nível superior. Essa falha de inflação de nível superior é o que é relatado como uma exceção nos logs de erros. Mas a exceção inicial não parece viajar pela cadeia o suficiente para ser relatada.Diante dessa situação, a questão é como expor a exceção inicial, quando ela não aparece no log de erros.
A solução é bem simples: coloque um bloco
try
/catch
ao redor do conteúdo do fragmentoonCreateView()
e, nacatch
cláusula, registre a exceção:Pode não ser óbvio para qual classe de fragmento
onCreateView()
fazer isso e, nesse caso, para cada classe de fragmento usada no layout que causou o problema. Por exemplo, no caso do OP, o código do aplicativo em que a exceção ocorreu foiqual é
Portanto, você precisa capturar exceções nos
onCreateView()
fragmentos mencionados no layoutactivity_main
.No meu caso, a exceção de causa raiz acabou sendo
Essa exceção não apareceu no log de erros até que eu a peguei
onCreateView()
e a registrei explicitamente. Uma vez registrado, o problema era fácil de diagnosticar e corrigir (details_view.xml
existia apenas naldrtl-xhdpi
pasta, por algum motivo). A chave foi capturar a exceção que era a raiz do problema e expô-lo.Não faz mal fazer isso como um clichê nos métodos de todos os seus fragmentos
onCreateView()
. Se houver uma exceção não capturada, a atividade será interrompida independentemente. A única diferença é que, se você capturar e registrar a exceçãoonCreateView()
, não ficará no escuro por que isso aconteceu.PS: Acabei de perceber que esta resposta está relacionada à @ DaveHubbard, mas usa uma abordagem diferente para encontrar a causa raiz (registro versus depurador).
fonte
Eu tive o mesmo problema, problema, tentei todas as respostas neste tópico sem sucesso. Minha solução foi não ter adicionado um ID no XML da atividade. Eu não pensei que isso importaria, mas importava.
Então, no XML da atividade, eu tinha:
Mas deveria ter tido:
Se alguém ficaria feliz em comentar o porquê disso, sou todo ouvidos, espero que isso ajude.
fonte
Pode não ser mais necessário para você, mas se outros leitores acharem útil. Eu tenho exatamente o mesmo
android.view.InflateException:...Error inflating class fragment
. Eu tinha todas as bibliotecas certas incluídas. Resolvido adicionando mais uma permissão de usuário noAndroidManifest.xml
arquivo<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Btw eu estava correndo
Android Studio 0.8.9 on Ubuntu 12.04.
fonte
Eu tenho o mesmo problema porque não implementei o ouvinte. Veja o seguinte código com
/*Add This!*/
.Para sua informação, minha classe de fragmento é algo como o seguinte:
Editar:
Também noto essa mesma mensagem de erro em outras circunstâncias quando há uma exceção na
onCreate
função doFragment
. Eu tenho algo como o seguinte:Por reutilizar esse fragmento, esqueci completamente de definir argumentos. Então o resultado de
getArguments()
énull
. Obviamente, recebo umanull
exceção de ponteiro aqui. Vou sugerir que você fique de olho em erros como esse também.fonte
O seu NavigationDrawerFragment está estendendo o android.support.v4.app.Fragment? Em outras palavras, você está importando o pacote correto?
fonte
Eu também tive esse problema. Eu o resolvi substituindo a importação
MainActivity
eNavigationDrawerFragment
De
Para
Atualizei
MainActivity
para estende emActionBarActivity
vez de AtividadeUse também
ActionBar actionBar = getSupportActionBar();
para obter o ActionBarE atualizei a seguinte função em
NavigationDrawerFragment
fonte
Eu enfrentei esse problema e o resolvi usando os seguintes códigos. Eu estava iniciando uma transação de fragmento usando o gerenciador de fragmento de criança.
layout:
é assim que eu comecei a transação de fragmento:
os seguintes códigos explicam como eu removi o fragmento que foi adicionado usando childfragmentmanger.
fonte
Eu tive problemas semelhantes dentro e fora. A mensagem de erro geralmente fornece muito poucos detalhes, independentemente da causa real. Mas encontrei uma maneira de obter informações mais úteis. Acontece que a classe android interna 'LayoutInflater.java' (no pacote android.view) possui um método 'inflar' que lança novamente uma exceção, mas não capta os detalhes, então você perde informações sobre a causa.
Usei o AndroidStudio e defina um ponto de interrupção na linha LayoutInflator 539 (na versão em que estou trabalhando), que é a primeira linha do bloco catch para uma exceção genérica no método 'inflate':
Se você observar 'e' no depurador, verá um campo 'causa'. Pode ser muito útil dar uma dica sobre o que realmente ocorreu. Foi assim, por exemplo, que descobri que o pai de um fragmento incluído deve ter um ID, mesmo que não seja usado no seu código. Ou que um TextView teve um problema com uma dimensão.
fonte
Apenas no caso de alguém precisar disso. Pressupostos: o telefone do dispositivo está conectado ao cabo USB e sua leitura do IDE para iniciar o aplicativo. Vá para o prompt de comando para determinar o problema: insira adb logcat
Em seguida, inicie seu aplicativo a partir do IDE. Você será uma exceção.
No meu caso: eu estava implantando um aplicativo Android da versão 2.3 em um dispositivo móvel que não suportava o widget "Space"
fonte
Esse problema surge quando você tem uma classe personalizada que estende uma classe diferente (nesse caso, uma exibição) e não importa todos os construtores exigidos pela classe.
Por exemplo: public class CustomTextView estende o TextView {}
Essa classe teria quatro construtores e, se você perder alguém, ela falharia. Na verdade, eu perdi o último que foi usado por Lollipop adicionou esse construtor e funcionou bem.
fonte
também precisamos adicionar o seguinte em build.gradle (app)
sempre que estivermos usando novos layouts ou novos recursos de design. Espero que isso ajude você.
fonte
Como mencionado em uma postagem anterior,
renomeie
para
Ainda assim, não funcionou para mim. Eu apenas usei o nome da classe sem a parte com.fragment e pronto, funcionou. Então mude finalmente para
fonte
Depois que nenhuma das respostas aqui me ajudou, optei por executar o aplicativo no modo de depuração, movendo-se por todas as linhas do onCreateView no meu fragmento (NavigationDrawerFragment no seu caso). E percebeu que o fragmento estava tendo dificuldade em inflar por causa de uma NullPointerException. Por exemplo
Aqui mySeekBar foi definido como nulo (porque eu tinha deixado de adicionar o controle no layout apropriado) e a próxima linha entrou no NPE, que saiu como InflateException. Além disso, como sugerido acima, renomeie android: name para class.
Esse problema pode surgir por vários motivos mencionados acima. Eu recomendaria o fluxo de depuração linha a linha para saber o que está errado.
fonte
onCreateView()
método de um fragmento ?Para alguns de vocês que ainda não encontraram uma solução para isso, no meu caso, isso estava acontecendo porque eu tinha um problema de OOM (falta de memória). Isso pode acontecer quando, por exemplo, há um vazamento de memória no seu aplicativo ao usá-lo por um longo tempo. No meu rastreamento de pilha, esse foi o principal motivo.
fonte
Não sei se isso vai ajudar.
Eu tive esse problema com um TextView que eu tinha no layout que estava tentando inflar ( android.view.InflateException: Linha de arquivos XML binários # 45: Erro ao inflar a classe TextView ).
Eu havia definido o seguinte atributo XML android: textSize = "? Android: attr / textAppearanceLarge", que não permitia que o layout fosse inflado.
Não sei exatamente por que ( ainda sou um pouco novo para o Android - menos de um ano de experiência ), pode ter algo a ver com a chamada de atributos do sistema, idk, tudo que sei é que assim que usei @ dimen / md_text_16sp ( que é um costume meu ), problema resolvido :)
Espero que isto ajude...
fonte
Widget.Design.TextInputLayout
:. stackoverflow.com/questions/19874882/…Eu tinha isso em um dispositivo 4.4.2, mas 5+ estava bem. A causa: dentro da inicialização de uma exibição personalizada, eu estava criando um
TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes)
, que é a API 21+.O Android Studio 2.1 não se queixa, apesar de anotado
TargetApi(21)
. Aparentemente, o Android Studio 2.2 irá corrigir isso e mostrá-lo corretamente como um erro.Espero que isso ajude alguém.
fonte
Estou um pouco atrasado para a festa, mas nenhuma dessas respostas me ajudou no meu caso. Eu estava usando o mapa do Google como SupportMapFragment e PlaceAutocompleteFragment, ambos no meu fragmento. Como todas as respostas apontaram para o fato de que o problema é o SupportMapFragment ser o mapa a ser recriado e redesenhado.
Mas também tive problemas com o PlaceAutocompleteFragment. Então, aqui está a solução de trabalho para quem está enfrentando esse problema por causa do SupportMapFragment e SupportMapFragment
E no onDestroyView desmarque as opções SupportMapFragment e SupportMapFragment
fonte
Depois de muito tempo de tentativas, foi assim que resolvi o problema depois que nenhuma das respostas acima conseguiu.
AppCompatActivity
suaMain
atividade em vez deActivity
.android:theme="@style/Theme.AppCompat.Light"
ao seu<Activity..../>
noAndroidManifest.xml
Na sua
NavigationDrawerFragment
classe, altere suasActionBar
instâncias paraEDITAR
Deve ser uma consistência entre a Atividade e o Layout . Se o Layout tiver um dos Temas AppCompat como
Theme.AppCompat.Light
, sua Atividade deveráextends AppCompatActivity
.Eu queria ter o ícone do hambúrguer e uma Gaveta de Navegação que se parece com o Android Gmail App , mas acabei com uma Gaveta de Navegação feia . Tudo isso porque todas as minhas aulas em
extends Activity
vez deAppCompatActivity
.Eu refatorei todo o projeto para estender
AppCompatActivity
, clique com oLayout Folder
botão direito do mouse em , escolhanew
->Activity
thenNavigation Drawer Activity
e Boom, tudo está feito por mim!fonte
A visualização pode ser qualquer coisa que não esteja sendo inflada; esse tipo de erro ocorre quando há um conflito na resolução dos nomes de classe ou atributo de nome de uma visualização referida no arquivo XML.
Quando eu recebo o mesmo erro, deixei tudo limpo e seguro no arquivo XML da interface do usuário, a exibição que eu estava usando,
Eu estava usando um atributo de estilo que estava se referindo à propriedade Componentes de materiais. Mas meu styles.xml tinha ...
Onde a resolução de classe estava enfrentando o conflito. Meus atributos de exibição referiram uma propriedade que não foi definida no tema do meu aplicativo. O tema pai certo dos componentes materiais me ajudou. Então mudei o atributo pai para ...
O que resolveu o problema.
fonte
Eu acho que o problema básico é com "android: targetSdkVersion", que é definido no AndroidManifest.xml. No meu caso, o valor inicial que defini como:
android:targetSdkVersion=16
Eu mudei para:
android:targetSdkVersion=22
que resolveu todos os meus erros. Portanto, a configuração da "targetSdkVersion" correta também é importante antes da criação de um aplicativo Android.
fonte
Caso outra pessoa venha aqui e as respostas não ajudem a resolver o problema, mais uma coisa a tentar.
Como outros já mencionaram, isso geralmente é causado por um problema aninhado no XML em vez de algo que você fez de errado no Java. No meu caso, foi um erro super fácil (e estúpido) de corrigir.
Eu tinha um código como este:
Quando tudo o que eu precisava fazer era colocar em maiúscula o v em 'View' para que o sistema o reconhecesse. Verifique se suas exibições personalizadas (ou fragmentos, recyclerviews, etc.) possuem a declaração em maiúscula apropriada, para que o preenchimento automático do XML corresponda à exibição apropriada.
fonte
Também tive esse erro e, depois de muito tempo depurando, o problema parecia que minha MainClass estendeu a Activity em vez de FrameActivity, no meu caso, o xml não era um problema. Espero ajudá-lo.
fonte
No meu caso .
O layout que eu estava tentando inflar tinha
removê-lo e corrigi-lo.
Eu estava tentando inflar um layout anterior projetado para um Actvity no adaptador de visualização de pager.
fonte
Meu erro foi causado por um problema diferente.
Eu estava passando um pacote de uma atividade para seu fragmento. Quando comentei o código que recebeu o pacote no fragmento, o erro se foi. Como se viu, meu erro ocorreu devido ao abaixo "getArguments ();" parte que estava retornando nula.
Ao verificar o código de envio da atividade, percebi que havia um erro bobo no abaixo;
Eu estava criando um NOVO fragmento na linha com a seta. Considerando que eu deveria ter usado o fragmento pré-instanciado que já tinha meu pacote. Então deveria ter sido:
Não sei por que exatamente ele lança esse erro em vez de um NPE, mas isso resolveu meu erro no caso de alguém estar tendo o mesmo cenário
fonte
Eu estava tendo o mesmo problema, no meu caso o nome do pacote estava errado, corrigindo-o resolveu o problema.
fonte
Abra o gradle.properties e adicione a seguinte linha:
Referência: https://github.com/chrisjenx/Calligraphy/issues/417#issuecomment-365177808
fonte
Eu tive esse erro quando tive meu RecyclerView na raiz do meu fragment.xml,
mas quando envolvi-o com um ViewGroup, o aplicativo funcionou bem.
fonte
Adicione este campo de nome na navegação
fonte