Saya memiliki kesalahan yang sangat membuat frustrasi yang tidak bisa saya jelaskan. Saya membuat aplikasi Android yang digunakan Android AppCompat
untuk membuatnya kompatibel dengan versi yang lebih lama. Ini adalah file tata letak aktivitas utama saya:
<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>
Dan di sini adalah kode utama aktivitas saya:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Masalah utama di sini adalah: kode di atas berjalan dengan lancar di hampir semua perangkat (perangkat yang distimulasi, atau beberapa perangkat nyata). Tetapi ketika saya menjalankannya di Samsung S3. Itu memperhatikan kesalahan ini:
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)
Tolong beritahu saya cara memperbaiki kesalahan, terima kasih :)
Jawaban:
Setelah lama debugging, saya telah memperbaiki masalah ini. (Meskipun saya masih tidak bisa menjelaskan alasannya). Bahwa saya mengubah properti
android:name
menjadiclass
. (meskipun pada Dokumen Android, mereka mengatakan properti itu sama, tetapi berfungsi !!!)Jadi, itu harus berubah dari:
untuk
Jadi, tata letak baru harus:
Semoga bantuan ini :)
sumber
android:id
menjadiclass
) bekerja untuk saya. Saya juga mendapat peringatan Lint perubahanFragment
untukfragment
, yang saya lakukan.name
menjadiclass
, saya memiliki beberapa pengguna melaporkan kerusakan ini tetapi tidak dapat mem-repro sendiri!Saya tidak dapat memecahkan masalah saya menggunakan jawaban yang disediakan. Akhirnya saya mengubah ini:
untuk ini :
,
dan itu berhasil.
Jika Anda menggunakannya di dalam fragmen, gunakan getChildFragmentManager alih-alih getSupportFragmentManager .
sumber
TL / DR : Pengecualian terjadi selama pembuatan fragmen yang dirujuk dari tata letak XML tingkat tinggi. Pengecualian ini menyebabkan inflasi tata letak tingkat yang lebih tinggi gagal, tetapi pengecualian awal tidak dilaporkan ; hanya kegagalan tingkat inflasi yang lebih tinggi yang muncul dalam tumpukan jejak. Untuk menemukan akar penyebabnya, Anda harus menangkap dan mencatat pengecualian awal .
Penyebab awal kesalahan ini bisa bermacam-macam, itulah sebabnya ada begitu banyak jawaban berbeda di sini tentang apa yang memperbaiki masalah bagi setiap orang. Untuk beberapa, itu ada hubungannya dengan
id
,class
atauname
atribut. Bagi yang lain itu karena masalah izin atau pengaturan build. Bagi saya, itu tidak memperbaiki masalah; alih-alih ada sumber daya yang dapat digambar yang hanya ada didrawable-ldrtl-xhdpi
, bukannya di tempat yang berlaku sepertidrawable
.Tapi itu hanya detail. Masalah gambaran besarnya adalah bahwa pesan kesalahan yang muncul di logcat tidak menjelaskan pengecualian yang memulai semuanya. Ketika tata letak tingkat yang lebih tinggi mereferensikan sebuah fragmen, fragmen itu
onCreateView()
disebut. Ketika pengecualian terjadi di fragmenonCreateView()
(misalnya saat menggelembungkan tata letak XML fragmen), itu menyebabkan inflasi tata letak XML tingkat tinggi gagal. Kegagalan inflasi tingkat yang lebih tinggi inilah yang dilaporkan sebagai pengecualian dalam log kesalahan. Tetapi pengecualian awal tampaknya tidak berjalan cukup baik untuk dilaporkan.Mengingat situasi itu, pertanyaannya adalah bagaimana mengekspos pengecualian awal, ketika itu tidak muncul di log kesalahan.
Solusinya cukup mudah: Letakkan a
try
/catch
blok di sekitar isi fragmenonCreateView()
, dan dalamcatch
klausa, catat pengecualian:Mungkin tidak jelas kelas fragmen mana yang
onCreateView()
melakukan ini, dalam hal ini, melakukannya untuk setiap kelas fragmen yang digunakan dalam tata letak yang menyebabkan masalah. Misalnya, dalam kasus OP, kode aplikasi tempat pengecualian terjadiyang mana
Jadi, Anda perlu menangkap pengecualian dalam
onCreateView()
setiap fragmen yang dirujuk dalam tata letakactivity_main
.Dalam kasus saya, pengecualian akar penyebab ternyata
Pengecualian ini tidak muncul di log kesalahan sampai saya menangkapnya
onCreateView()
dan masuk secara eksplisit. Setelah log, masalahnya cukup mudah untuk didiagnosis dan diperbaiki (details_view.xml
hanya ada di bawahldrtl-xhdpi
folder, untuk beberapa alasan). Kuncinya adalah menangkap pengecualian yang merupakan akar masalah, dan mengeksposnya.Tidak ada salahnya untuk melakukan ini sebagai pelat di semua
onCreateView()
metode fragmen Anda . Jika ada pengecualian di sana, itu akan merusak aktivitas apa pun. Satu-satunya perbedaan adalah bahwa jika Anda menangkap dan mencatat pengecualianonCreateView()
, Anda tidak akan tahu mengapa itu terjadi.PS Saya baru menyadari jawaban ini terkait dengan @ DaveHubbard, tetapi menggunakan pendekatan yang berbeda untuk menemukan akar penyebab (logging vs. debugger).
sumber
Saya memiliki masalah yang sama, masalah, mencoba semua jawaban di utas ini tetapi tidak berhasil. Solusi saya adalah, saya belum menambahkan ID di Activity XML. Saya tidak berpikir itu penting, tetapi itu benar.
Jadi dalam Activity XML saya punya:
Tapi seharusnya sudah:
Jika seseorang akan senang mengomentari mengapa ini, saya mendengar, untuk yang lain, saya harap ini membantu.
sumber
Mungkin tidak diperlukan lagi untuk Anda, tetapi jika pembaca lebih lanjut merasa terbantu. Saya memiliki yang sama persis
android.view.InflateException:...Error inflating class fragment
. Saya memiliki semua perpustakaan yang tepat. Dipecahkan dengan menambahkan satu lagi izin pengguna dalamAndroidManifest.xml
file yaitu<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Btw saya berlari
Android Studio 0.8.9 on Ubuntu 12.04.
sumber
Saya memiliki masalah yang sama karena saya tidak mengimplementasikan pendengar. Lihat kode berikut dengan
/*Add This!*/
.FYI, kelas fragmen saya adalah sesuatu seperti yang berikut:
Edit:
Saya juga melihat pesan kesalahan yang sama ini dalam keadaan lain ketika ada pengecualian dalam
onCreate
fungsiFragment
. Saya memiliki sesuatu sebagai berikut:Karena saya menggunakan kembali fragmen ini, saya benar-benar lupa untuk mengatur argumen. Maka hasilnya
getArguments()
adalahnull
. Jelas, saya mendapatkannull
pengecualian pointer di sini. Saya akan menyarankan Anda mengawasi kesalahan seperti ini juga.sumber
Apakah NavigationDrawerFragment Anda memperpanjang android.support.v4.app.Fragment? Dengan kata lain, apakah Anda mengimpor paket yang benar?
sumber
Saya juga punya masalah ini. Saya menyelesaikannya dengan mengganti impor
MainActivity
danNavigationDrawerFragment
Dari
Untuk
Saya memperbarui
MainActivity
untuk meluasActionBarActivity
bukannya AktivitasJuga gunakan
ActionBar actionBar = getSupportActionBar();
untuk mendapatkan ActionBarDan saya memperbarui fungsi berikut di
NavigationDrawerFragment
sumber
saya menghadapi masalah ini dan menyelesaikannya dengan menggunakan kode berikut. Saya memulai transaksi fragmen dengan menggunakan manajer childfragment.
tata letak:
beginilah cara saya memulai transaksi fragmen:
kode berikut menjelaskan bagaimana saya menghapus fragmen yang ditambahkan dengan menggunakan childfragmentmanger.
sumber
Saya memiliki masalah yang sama dan mematikan. Pesan kesalahan sering memberikan detail yang sangat sedikit, terlepas dari penyebab sebenarnya. Tetapi saya menemukan cara untuk mendapatkan info yang lebih bermanfaat. Ternyata kelas android internal 'LayoutInflater.java' (dalam paket android.view) memiliki metode 'mengembang' yang melempar kembali pengecualian, tetapi tidak mengambil detailnya, sehingga Anda kehilangan info tentang penyebabnya.
Saya menggunakan AndroidStudio, dan menetapkan breakpoint di baris LayoutInflator 539 (dalam versi yang sedang saya kerjakan), yang merupakan baris pertama dari catch block untuk pengecualian umum dalam metode 'mengembang':
Jika Anda melihat 'e' di debugger, Anda akan melihat bidang 'penyebab'. Ini bisa sangat membantu dalam memberi Anda petunjuk tentang apa yang sebenarnya terjadi. Ini adalah bagaimana, misalnya, saya menemukan bahwa induk dari fragmen yang disertakan harus memiliki id, bahkan jika tidak digunakan dalam kode Anda. Atau bahwa TextView memiliki masalah dengan dimensi.
sumber
Untuk berjaga-jaga jika seseorang membutuhkan ini. Asumsi: Ponsel perangkat terhubung ke kabel USB dan pembacaan IDE Anda untuk meluncurkan aplikasi. Buka prompt perintah untuk menentukan masalah: masukkan adb logcat
Kemudian luncurkan aplikasi Anda dari IDE. Anda akan pengecualian.
Dalam kasus saya: Saya menggunakan aplikasi Android Versi 2.3 ke perangkat seluler yang tidak mendukung widget "Space"
sumber
Masalah ini muncul ketika Anda memiliki kelas khusus yang memperluas kelas yang berbeda (dalam hal ini tampilan) dan tidak mengimpor semua konstruktor yang diperlukan oleh kelas.
Untuk misalnya: kelas publik CustomTextView meluas TextView {}
Kelas ini akan memiliki 4 konstruktor dan jika Anda kehilangan salah satu itu akan crash. Sebenarnya saya melewatkan yang terakhir yang digunakan oleh Lollipop menambahkan konstruktor dan bekerja dengan baik.
sumber
kita juga harus menambahkan berikut di build.gradle (aplikasi)
setiap kali kita menggunakan tata letak baru atau fitur desain baru. Semoga ini bisa membantu Anda.
sumber
Seperti disebutkan dalam posting sebelumnya,
ganti nama
untuk
Tetap saja, itu tidak berhasil untuk saya. Saya kemudian hanya menggunakan Nama Kelas tanpa bagian com.fragment dan voila itu berhasil. Jadi ubahlah akhirnya menjadi
sumber
Setelah tidak ada jawaban di sini yang membantu saya, saya memilih untuk menjalankan aplikasi dalam mode debug yang bergerak di setiap baris onCreateView di bagian saya (NavigationDrawerFragment dalam kasus Anda). Dan perhatikan bahwa fragmen mengalami kesulitan mengembung karena NullPointerException. Misalnya
Di sini mySeekBar disetel ke nol (karena saya telah melewatkan menambahkan kontrol dalam tata letak yang sesuai) dan baris berikutnya masuk ke NPE yang keluar sebagai InflateException. Juga, seperti yang disarankan di atas, ganti nama android: name to class.
Masalah ini dapat timbul karena berbagai alasan yang disebutkan di atas. Saya akan merekomendasikan aliran debug baris demi baris untuk mengetahui apa yang salah.
sumber
onCreateView()
?Bagi sebagian dari Anda yang masih belum menemukan solusi untuk ini, dalam kasus saya itu terjadi karena saya memiliki masalah OOM (Kehabisan Memori). Ini bisa terjadi ketika Anda misalnya memiliki kebocoran memori di aplikasi Anda ketika menggunakannya untuk waktu yang lama. Dalam jejak tumpukan saya, ini adalah alasan utama.
sumber
Saya tidak tahu apakah ini akan membantu.
Saya punya masalah dengan TextView yang saya miliki di tata letak yang saya coba untuk mengembang ( android.view.InflateException: Binary XML file baris # 45: Kesalahan menggembungkan TextView kelas ).
Saya telah menetapkan atribut XML android berikut : textSize = "? Android: attr / textAppearanceLarge" yang tidak memungkinkan tata letak meningkat.
Tidak tahu persis mengapa, ( saya masih sedikit baru untuk Android - kurang dari satu tahun pengalaman ), mungkin ada hubungannya dengan memanggil atribut sistem, idk, yang saya tahu adalah segera setelah saya menggunakan @ @ dimen / md_text_16sp ( yang merupakan kebiasaan saya ), masalah diselesaikan :)
Semoga ini membantu...
sumber
Widget.Design.TextInputLayout
:. stackoverflow.com/questions/19874882/…Saya memiliki ini pada perangkat 4.4.2, tapi 5+ baik-baik saja. Penyebabnya: di dalam inisialisasi tampilan khusus, saya membuat
TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes)
, yaitu API 21+.Android Studio 2.1 tidak mengeluh tentang hal itu meskipun itu beranotasi
TargetApi(21)
. Rupanya, Android Studio 2.2 akan memperbaiki ini dan menunjukkannya dengan benar sebagai kesalahan.Semoga ini bisa membantu seseorang.
sumber
Saya agak terlambat ke pesta tetapi tidak ada jawaban yang membantu saya dalam kasus saya. Saya menggunakan Google map sebagai SupportMapFragment dan PlaceAutocompleteFragment baik dalam fragmen saya. Karena semua jawaban menunjuk pada fakta bahwa masalahnya adalah dengan SupportMapFragment menjadi peta yang akan dibuat kembali dan digambar ulang.
Tapi saya juga punya masalah dengan PlaceAutocompleteFragment. Jadi di sini adalah solusi untuk mereka yang menghadapi masalah ini karena SupportMapFragment dan SupportMapFragment
Dan di onDestroyView hapus SupportMapFragment dan SupportMapFragment
sumber
Setelah lama mencoba, ini adalah bagaimana saya memecahkan masalah setelah tidak ada jawaban di atas yang bisa.
AppCompatActivity
untukMain
aktivitas Anda, bukanActivity
.android:theme="@style/Theme.AppCompat.Light"
ke<Activity..../>
dalamAndroidManifest.xml
Di
NavigationDrawerFragment
Kelas Anda , ubahActionBar
instance Anda keEDIT
Itu harus menjadi konsistensi antara Kegiatan dan Tata Letak . Jika Layout memiliki salah satu Tema AppCompat seperti
Theme.AppCompat.Light
, Aktivitas Anda harusextends AppCompatActivity
.Saya ingin memiliki ikon burger dan Laci Navigasi yang mirip dengan Aplikasi Gmail Android , tetapi saya berakhir dengan Laci Navigasi yang jelek . Semua itu karena semua Kelas saya
extends Activity
bukanAppCompatActivity
.Saya memfaktorkan ulang seluruh proyek untuk diperpanjang
AppCompatActivity
, lalu Klik Kanan padaLayout Folder
, pilihnew
->Activity
laluNavigation Drawer Activity
dan Boom, semuanya dilakukan untuk saya!sumber
Tampilan bisa berupa apa saja yang gagal meningkat, kesalahan semacam ini muncul ketika ada bentrokan dalam menyelesaikan nama kelas atau atribut nama tampilan yang dirujuk dalam file XML.
Ketika saya mendapatkan kesalahan yang sama, saya baru saja mendapatkan semuanya bersih dan aman di file UI-XML, tampilan yang saya gunakan,
Saya menggunakan atribut style yang merujuk ke properti komponen Material. Tapi styles.xml saya punya ...
Di mana penyelesaian kelas menghadapi konflik. Atribut tampilan saya merujuk properti yang tidak didefinisikan dalam tema aplikasi saya. Tema induk yang tepat dari komponen material membantu saya. Jadi saya mengubah atribut induk ke ...
Yang menyelesaikan masalah.
sumber
Saya pikir masalah dasarnya adalah dengan "android: targetSdkVersion" yang didefinisikan dalam AndroidManifest.xml. Dalam kasus saya, nilai awal yang telah saya definisikan sebagai:
android:targetSdkVersion=16
Saya mengubahnya menjadi:
android:targetSdkVersion=22
yang menyelesaikan semua kesalahan saya. Jadi, mengatur "targetSdkVersion" yang benar juga penting sebelum membangun aplikasi android.
sumber
Jika ada orang lain datang ke sini dan jawabannya tidak membantu menyelesaikan masalah, satu hal lagi untuk dicoba.
Seperti yang telah disebutkan orang lain, ini biasanya disebabkan oleh masalah yang bersarang di XML itu sendiri sebagai lawan dari sesuatu yang Anda lakukan salah di Java Anda. Dalam kasus saya, itu adalah kesalahan super mudah (dan bodoh) untuk memperbaikinya.
Saya punya kode seperti ini:
Ketika semua yang harus saya lakukan adalah huruf besar v di 'Tampilan' sehingga sistem mengetahuinya. Periksa bahwa tampilan khusus Anda (Atau Fragmen, tinjauan ulang, dll.) Semuanya memiliki deklarasi huruf kapital yang tepat di depan sehingga XML-lengkap otomatis akan mencocokkannya dengan tampilan yang sesuai.
sumber
Saya memiliki kesalahan ini juga, dan setelah debugging yang sangat lama masalah yang muncul adalah bahwa MainClass saya memperpanjang Activity daripada FrameActivity, dalam kasus saya, xml bukan masalah. Semoga dapat membantu Anda.
sumber
Dalam kasus saya .
Tata letak saya mencoba mengembang punya
tag, menghapusnya memperbaikinya.
Saya mencoba untuk mengembang tata letak sebelumnya yang dirancang untuk Actvity ke adaptor view-pager.
sumber
Kesalahan saya disebabkan oleh masalah yang berbeda.
Saya melewati satu bundel dari Aktivitas ke fragmennya. Ketika saya berkomentar kode yang menerima bundel dalam fragmen kesalahan hilang. Ternyata, kesalahan saya adalah karena di bawah ini "getArguments ();" bagian yang mengembalikan null.
Setelah memeriksa kode pengiriman Aktivitas, saya menyadari saya memiliki kesalahan konyol di bawah ini;
Saya sedang membuat fragmen BARU sejalan dengan panah. Padahal aku seharusnya menggunakan fragmen pra-instantiated yang sudah memiliki bundel saya. Jadi seharusnya:
Saya tidak tahu mengapa tepatnya ia melempar kesalahan ini, bukan NPE, tetapi ini menyelesaikan kesalahan saya jika seseorang memiliki skenario yang sama
sumber
Saya mengalami masalah yang sama, dalam kasus saya nama paket salah, memperbaikinya menyelesaikan masalah.
sumber
Buka gradle.properties dan tambahkan baris berikut:
Referensi: https://github.com/chrisjenx/Calligraphy/issues/417#issuecomment-365177808
sumber
Saya memiliki kesalahan ini ketika saya memiliki RecyclerView saya di root fragment.xml saya,
tetapi ketika saya membungkusnya dengan ViewGroup, aplikasi bekerja dengan baik.
sumber
Tambahkan bidang nama ini di navigasi
sumber