android.view.InflateException: File XML biner: Kesalahan menggembungkan fragmen kelas

151

Saya memiliki kesalahan yang sangat membuat frustrasi yang tidak bisa saya jelaskan. Saya membuat aplikasi Android yang digunakan Android AppCompatuntuk 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 :)

hqt
sumber
1
Di baris ini Anda mendapatkan pengecualian, periksa apakah nama kelas dan nama paket sudah benar atau tidak..android: name = "com.hqt.hac.view.fragment.NavigationDrawerFragment"
kalyan pvs
1
Saya telah memeriksa dan kelas ini benar. saya dapat mengkompilasi dan menjalankan pada beberapa perangkat tetapi tidak samsung s3. Saya pikir beberapa masalah aneh di sini :(
hqt
Anda benar jika dieksekusi pada beberapa perangkat dan bukan pada s3 itu adalah masalah aneh .. saran saya pernah mencoba menggunakan sherlacFragment chek sekali ..
kalyan pvs
Saya sudah memecahkan masalah di sini: stackoverflow.com/a/33128448/4366715 .
daniel kilinskas
1
Bagi mereka yang mencoba mendiagnosis penyebab kesalahan ini: Perbaikan anekdotal di sini adalah herring merah. Ada pengecualian sebelumnya yang terjadi selama inflasi fragmen yang tidak muncul dalam jejak tumpukan . Itu bisa apa saja. Untuk memperbaiki masalah, Anda harus mencari tahu apa pengecualian sebelumnya. Untuk melakukan itu, lihat jawaban saya atau @ DaveHubbard.
LarsH

Jawaban:

126

Setelah lama debugging, saya telah memperbaiki masalah ini. (Meskipun saya masih tidak bisa menjelaskan alasannya). Bahwa saya mengubah properti android:namemenjadi class. (meskipun pada Dokumen Android, mereka mengatakan properti itu sama, tetapi berfungsi !!!)

Jadi, itu harus berubah dari:

 android:name="com.fragment.NavigationDrawerFragment"

untuk

class = "com.fragment.NavigationDrawerFragment"

Jadi, tata letak baru harus:

<!-- 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"
    class = "com.fragment.NavigationDrawerFragment" />

Semoga bantuan ini :)

hqt
sumber
4
Saya mengalami masalah ini ketika mencoba mengikuti tutorial Android resmi. Perbaikan Anda (berubah android:idmenjadi class) bekerja untuk saya. Saya juga mendapat peringatan Lint perubahan Fragmentuntuk fragment, yang saya lakukan.
stevepastelan
9
@DownVoter: kesalahan ini membingungkan. Dan untungnya saya menemukan cara untuk memperbaikinya. Saya benar-benar minta maaf jika posting saya tidak dapat memperbaiki kesalahan Anda karena saya juga tidak dapat menjelaskan alasannya. Tapi saya pikir itu seharusnya tidak menerima suara turun. :)
hqt
2
Saya ingin tahu apakah Anda mendapatkan kerusakan ini dengan andal tanpa mengubah dari namemenjadi class, saya memiliki beberapa pengguna melaporkan kerusakan ini tetapi tidak dapat mem-repro sendiri!
Daniel Wilson
8
Tidak bekerja untuk saya. Saya sangat lelah. 2h dev dan tidak dapat menemukan mengapa itu tidak berhasil (Binary xml file line ... errror menggembungkan fragmen kelas). Ada ide ?
Cocorico
32

Saya tidak dapat memecahkan masalah saya menggunakan jawaban yang disediakan. Akhirnya saya mengubah ini:

<fragment
android:id="@+id/fragment_food_image_gallery"
android:name="ir.smartrestaurant.ui.fragment.ImageGalleryFragment"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout="@layout/fragment_image_gallery"
tools:layout="@layout/fragment_image_gallery" />

untuk ini :

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="200dp" />

,

private void showGallery() {
    ImageGalleryFragment fragment = new ImageGalleryFragment()
    getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .commit();
    }

dan itu berhasil.
Jika Anda menggunakannya di dalam fragmen, gunakan getChildFragmentManager alih-alih getSupportFragmentManager .

ReZa
sumber
31

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, classatau nameatribut. 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 di drawable-ldrtl-xhdpi, bukannya di tempat yang berlaku seperti drawable.

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/ catchblok di sekitar isi fragmen onCreateView(), dan dalam catchklausa, catat pengecualian:

public View onCreateView(LayoutInflater inflater, ViewGroup contnr, Bundle savedInstSt) {
    try {
        mContentView = inflater.inflate(R.layout.device_detail_frag, null);
        // ... rest of body of onCreateView() ...
    } catch (Exception e) {
        Log.e(TAG, "onCreateView", e);
        throw e;
    }
}

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 terjadi

at android.app.Activity.setContentView(Activity.java:1901)

yang mana

   setContentView(R.layout.activity_main);

Jadi, Anda perlu menangkap pengecualian dalam onCreateView()setiap fragmen yang dirujuk dalam tata letak activity_main.

Dalam kasus saya, pengecualian akar penyebab ternyata

Caused by: android.content.res.Resources$NotFoundException: Resource
   "com.example.myapp:drawable/details_view" (7f02006f)  is not a
   Drawable (color or path): TypedValue{t=0x1/d=0x7f02006f a=-1
   r=0x7f02006f}

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.xmlhanya ada di bawah ldrtl-xhdpifolder, untuk beberapa alasan). Kuncinya adalah menangkap pengecualian yang merupakan akar masalah, dan mengeksposnya.

Tidak ada salahnya untuk melakukan ini sebagai pelat di semuaonCreateView() metode fragmen Anda . Jika ada pengecualian di sana, itu akan merusak aktivitas apa pun. Satu-satunya perbedaan adalah bahwa jika Anda menangkap dan mencatat pengecualian onCreateView(), 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).

Lars
sumber
2
Anda mungkin menyelamatkan saya berjam-jam untuk debugging. Pujian!
Szymon Sadło
16

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:

<fragment
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Tapi seharusnya sudah:

<fragment
    android:id="@+id/some_fragment"
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Jika seseorang akan senang mengomentari mengapa ini, saya mendengar, untuk yang lain, saya harap ini membantu.

Mendekut
sumber
1
Terima kasih, ini berhasil untuk saya. Saya telah menghilangkan id selama berbulan-bulan, tetapi setelah beberapa perubahan tata letak tiba-tiba saya mulai mengalami crash ini. Android itu aneh.
erisco
Anda menjawab bekerja untuk saya. Saya hanya ingin tahu mengapa saya harus meletakkan atribut id ketika saya tidak menggunakannya di mana saja. Bisakah Anda jelaskan kepada saya?
Moshii
12

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 dalam AndroidManifest.xmlfile yaitu<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Btw saya berlari Android Studio 0.8.9 on Ubuntu 12.04.

Abu Shumon
sumber
Bekerja untukku! Terima kasih banyak!
Dadan
12

Saya memiliki masalah yang sama karena saya tidak mengimplementasikan pendengar. Lihat kode berikut dengan /*Add This!*/.

public class SomeActivity extends AppCompatActivity
        implements BlankFragment.OnFragmentInteractionListener /*Add this!*/ 
{
    @Override                                                  /*Add This!*/
    public void onFragmentInteraction(Uri uri){                /*Add This!*/
    }                                                          /*Add This!*/
}

FYI, kelas fragmen saya adalah sesuatu seperti yang berikut:

public class SomeFragment extends Fragment {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Uri uri);
    }
}

Edit:

Saya juga melihat pesan kesalahan yang sama ini dalam keadaan lain ketika ada pengecualian dalam onCreatefungsi Fragment. Saya memiliki sesuatu sebagai berikut:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);

    int ID = getArguments().getInt("val");

    return rootView;
} 

Karena saya menggunakan kembali fragmen ini, saya benar-benar lupa untuk mengatur argumen. Maka hasilnya getArguments()adalah null. Jelas, saya mendapatkan nullpengecualian pointer di sini. Saya akan menyarankan Anda mengawasi kesalahan seperti ini juga.

Yuchen Zhong
sumber
1
Terima kasih! Ini sangat membantu!
DLee
8

Apakah NavigationDrawerFragment Anda memperpanjang android.support.v4.app.Fragment? Dengan kata lain, apakah Anda mengimpor paket yang benar?

import android.support.v4.app.Fragment;
Wang
sumber
6

Saya juga punya masalah ini. Saya menyelesaikannya dengan mengganti impor MainActivitydanNavigationDrawerFragment

Dari

import android.app.Activity;
import android.app.ActionBar;

Untuk

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

Saya memperbarui MainActivityuntuk meluas ActionBarActivitybukannya Aktivitas

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks

Juga gunakan ActionBar actionBar = getSupportActionBar();untuk mendapatkan ActionBar

Dan saya memperbarui fungsi berikut di NavigationDrawerFragment

private ActionBar getActionBar()
{
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}
Fr4nz
sumber
Saya pikir ini adalah jawaban yang tepat. Tetapi saya menggunakan AppCompatActivity alih-alih ActionBarActivity (tidak usang) dan juga tidak menghapus impor android.app.ActionBar (seperti metode onAttach menggunakannya)
GramThanos
6

saya menghadapi masalah ini dan menyelesaikannya dengan menggunakan kode berikut. Saya memulai transaksi fragmen dengan menggunakan manajer childfragment.

tata letak:

                  <fragment
                    class="com.google.android.youtube.player.YouTubePlayerSupportFragment"
                    android:id="@+id/youtube_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

beginilah cara saya memulai transaksi fragmen:

   youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

kode berikut menjelaskan bagaimana saya menghapus fragmen yang ditambahkan dengan menggunakan childfragmentmanger.

@Override
    public void onDestroyView() {
        super.onDestroyView();

        youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

        if (youTubePlayerFragment != null)
        {
            getChildFragmentManager().beginTransaction().remove(youTubePlayerFragment).commitAllowingStateLoss();
        }

        youTubePlayer = null;
    }
Ali Gürelli
sumber
TY Ali. Kamu menyelamatkan hariku!
vm345
Bekerja dengan baik. Terima kasih!
Polyariz
4

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':

        } catch (Exception e) {
            InflateException ex = new InflateException(
                    parser.getPositionDescription()
                            + ": " + e.getMessage());
            ex.initCause(e);
            throw ex;

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.

Dave Hubbard
sumber
3

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"

al881
sumber
3

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.

Sagar Devanga
sumber
2

kita juga harus menambahkan berikut di build.gradle (aplikasi)

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'

setiap kali kita menggunakan tata letak baru atau fitur desain baru. Semoga ini bisa membantu Anda.

Uma Achanta
sumber
2

Seperti disebutkan dalam posting sebelumnya,
ganti nama

android:name="com.fragment.NavigationDrawerFragment"

untuk

class = "com.fragment.NavigationDrawerFragment"

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

class = "NavigationDrawerFragment"
mengapung ke barat
sumber
2

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

mySeekBar = (SeekBar) getActivity().findViewById(R.id.mySeekBar);
mySeekBar.setOnSeekBarChangeListener(this);

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.

Vishy
sumber
Dan apakah kesalahan ini terjadi dalam metode fragmen onCreateView()?
LarsH
1

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.

Sam Bellerose
sumber
1

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...

tl_
sumber
Saya tidak punya fragmen atau atribut android TextSize. Kesalahan saya terkait dengan TextInputLayout dengan gaya kustom mewarisi TextAppearance.AppCompat bukan Widget.Design.TextInputLayout:. stackoverflow.com/questions/19874882/…
Junior Mayhé
1

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.

Tom
sumber
1

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

 mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
    FragmentManager fm = getChildFragmentManager();

    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit();
        fm.executePendingTransactions();
    }

    mapFragment.getMapAsync(this);

    //Global PlaceAutocompleteFragment autocompleteFragment;


    if (autocompleteFragment == null) {
        autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment);

    }

Dan di onDestroyView hapus SupportMapFragment dan SupportMapFragment

@Override
public void onDestroyView() {
    super.onDestroyView();


    if (getActivity() != null) {
        Log.e("res","place dlted");
        android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.remove(autocompleteFragment);
        fragmentTransaction.commit();

        autocompleteFragment = null;
    }


}
Ratul Bin Tazul
sumber
1

Setelah lama mencoba, ini adalah bagaimana saya memecahkan masalah setelah tidak ada jawaban di atas yang bisa.

  1. Perluas AppCompatActivityuntuk Mainaktivitas Anda, bukan Activity.
  2. Tambahkan android:theme="@style/Theme.AppCompat.Light"ke <Activity..../>dalamAndroidManifest.xml
  3. Di NavigationDrawerFragmentKelas Anda , ubah ActionBarinstance Anda ke

    ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();

EDIT

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 Activitybukan AppCompatActivity.

Saya memfaktorkan ulang seluruh proyek untuk diperpanjang AppCompatActivity, lalu Klik Kanan pada Layout Folder, pilih new-> Activitylalu Navigation Drawer Activitydan Boom, semuanya dilakukan untuk saya!

Yahya
sumber
1
android.view.InflateException: Binary XML file line #16: Error inflating class com.google.android.material.bottomappbar.BottomAppBar

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,

   <com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottomAppBar"
    style="@style/Widget.MaterialComponents.BottomAppBar.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:hideOnScroll="true"
    app:menu="@menu/bottom_app_bar"
    app:navigationIcon="@drawable/ic__menu_24"/>

Saya menggunakan atribut style yang merujuk ke properti komponen Material. Tapi styles.xml saya punya ...

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
....
</style>

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 ...

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
</style>

Yang menyelesaikan masalah.

Shrinivas Manjithaya
sumber
0

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.

Sanjeev
sumber
0

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:

<view
    android:layout_width="fill_parent"
    android:layout_height="1dip"
    android:id="@+id/view44"
    android:background="@color/gray"
    />

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.

PGMacDesign
sumber
0

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.

Copacel
sumber
0

Dalam kasus saya .

Tata letak saya mencoba mengembang punya

<include 
 layout  = "...."
/>

tag, menghapusnya memperbaikinya.

Saya mencoba untuk mengembang tata letak sebelumnya yang dirancang untuk Actvity ke adaptor view-pager.

mughil
sumber
0

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.

Bundle args = getArguments();

Setelah memeriksa kode pengiriman Aktivitas, saya menyadari saya memiliki kesalahan konyol di bawah ini;

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 FragmentManager fragmentManager = getSupportFragmentManager();
 --> fragmentManager.beginTransaction()
                        .replace(R.id.container, new  MainActivityFragment(),
                                DetailRecipeActivityFragment.TAG)
                        .commit();

Saya sedang membuat fragmen BARU sejalan dengan panah. Padahal aku seharusnya menggunakan fragmen pra-instantiated yang sudah memiliki bundel saya. Jadi seharusnya:

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 Fragment mainFragment = new MainActivityFragment();
 FragmentManager fragmentManager = getSupportFragmentManager();
 -->fragmentManager.beginTransaction()
                        .replace(R.id.container, mainFragment,
                                DetailRecipeActivityFragment.TAG)
                        .commit();

Saya tidak tahu mengapa tepatnya ia melempar kesalahan ini, bukan NPE, tetapi ini menyelesaikan kesalahan saya jika seseorang memiliki skenario yang sama

Amgad
sumber
0

Saya mengalami masalah yang sama, dalam kasus saya nama paket salah, memperbaikinya menyelesaikan masalah.

Tincho825
sumber
0

Saya memiliki kesalahan ini ketika saya memiliki RecyclerView saya di root fragment.xml saya,

tetapi ketika saya membungkusnya dengan ViewGroup, aplikasi bekerja dengan baik.

7odafarghal
sumber
0

Tambahkan bidang nama ini di navigasi

android: name = "androidx.navigation.fragment.NavHostFragment"

   <fragment
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:name="androidx.navigation.fragment.NavHostFragment"
             app:navGraph="@navigation/navigation"
             app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
             app:layout_constraintTop_toTopOf="parent">
jai khambhayta
sumber