android.view.InflateException:Binary XML file:Error inflatating class fragment


151

説明できない非常にイライラするエラーがあります。Android AppCompat古いバージョンとの互換性を維持するために使用するAndroidアプリケーションを作成しました。ここに私の主な活動レイアウトファイルがあります:

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

そしてここに私の活動のメインコードがあります:

public class MainActivity extends ActionBarActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   }
}

ここでの主な問題は次のとおりです:上記のコードはほとんどのデバイス(刺激されたデバイス、または一部の実際のデバイス)でスムーズに実行されます。しかし、サムスンS3で実行すると、それはこのエラーに気づきます:

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)

エラーを修正する方法を教えてください、ありがとう:)


1
この行では、クラス名とパッケージ名が正しいかどうかの例外チェックを取得しています。.android:name = "com.hqt.hac.view.fragment.NavigationDrawerFragment"
kalyan pvs

1
私はチェックしました、そしてこのクラスは本当です。一部のデバイスではコンパイルして実行できますが、samsung s3ではできません。私はここでいくつかの奇妙な問題を考えています:(
hqt

それはしていないS3上のいくつかのデバイス上で実行されている場合、あなたは正しいです、それだかつて一度sherlacFragmentのCHEKを使用しようとされた奇妙なproblem..myのアドバイス..
カルヤンPVS

私はすでにここで問題を解決しました:stackoverflow.com/a/33128448/4366715
daniel kilinskas

1
このエラーの原因を診断しようとしている人のために:ここでの事例の修正は、赤いニシンです。スタックトレースに表示されないフラグメントの膨張中に、以前に例外が発生しました。それは何でもかまいません。問題を解決するには、前の例外が何であるかを見つける必要があります。それを行うには、私の回答または@DaveHubbardを参照してください。
LarsH

回答:


126

デバッグに長い時間をかけて、この問題を修正しました。(私はまだ理由を説明することはできませんが)。プロパティandroid:nameをに変更することclass。(Androidドキュメントでは、これらのプロパティは同じであると言われていますが、機能します!!!)

だから、それはから変更する必要があります:

 android:name="com.fragment.NavigationDrawerFragment"

class = "com.fragment.NavigationDrawerFragment"

したがって、新しいレイアウトは次のようになります。

<!-- 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" />

この助けを願っています:)


4
公式のAndroidチュートリアルを実行しようとしたときにこの問題に遭遇しました。あなたの修正(変更android:idにはclass)私のために働きました。私はまた、変化に糸くずの警告だFragmentfragment私は、。
stevepastelan 2013

9
@DownVoter:このエラーは混乱しています。そして、幸運にも修正方法を見つけました。私の投稿でもエラーを修正できない場合は、その理由を説明できないため、本当に申し訳ありません。しかし、私はそれが反対票を受け取るべきではないと思います。:)
hqt 2014年

2
からに変更せずにこのクラッシュが確実に発生したのかと思いますが、私は数人のユーザーにこのクラッシュを報告してもらいましたが、自分で再現することはできません!nameclass
Daniel Wilson

8
私にはうまくいきません。私は疲れている。開発の2hで、なぜ機能しないのかを見つけることができません(バイナリxmlファイルの行...エラーが膨らむクラスフラグメント)。何か案が ?
Cocorico

32

提供された回答を使用しても問題を解決できませんでした。最後にこれを変更しました:

<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" />

これに:

<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();
    }

そしてそれは動作します。
フラグメント内で使用する場合は、代わりにgetChildFragmentManagerを使用してください。 getSupportFragmentManager


31

TL / DR:上位レベルのレイアウトXMLから参照されるフラグメントの作成中に例外が発生しました。この例外により、高レベルのレイアウトインフレが失敗しましたが、最初の例外は報告されませんでした。スタックトレースには、より高いレベルのインフレの失敗のみが表示されます。根本的な原因を見つけるには、最初の例外キャッチしてログに記録する必要があります


エラーの最初の原因は多種多様なものである可能性があります。そのため、ここで各人の問題を修正した原因について非常に多くの異なる回答が存在します。いくつかのために、それはとしなければならなかったidclassまたはname属性。他の人にとっては、権限の問題またはビルド設定が原因でした。私にとって、それらは問題を解決しませんでした。代わりにdrawable-ldrtl-xhdpi、などの適用可能な場所ではなく、にのみ存在する描画可能なリソースがありましたdrawable

しかし、これらは単なる詳細です。全体像の問題は、logcatに表示されるエラーメッセージが、すべてを開始した例外を説明していないことです。上位レベルのレイアウトXMLがフラグメントを参照すると、そのフラグメントonCreateView()が呼び出されます。フラグメントの例外が発生したときonCreateView()(断片のレイアウトXMLを膨張させながら、例えば)、それが失敗し、より高いレベルのレイアウトXMLの膨張を引き起こします。このより高いレベルのインフレの失敗は、エラーログで例外として報告されるものです。しかし、最初の例外は、報告されるほど十分にチェーンを上るようには見えません。

そのような状況で、問題は、エラーログに表示されない初期例外をどのように公開するかです。

解決策は非常に簡単です。フラグメントのの内容の周りにtry/ catchブロックを置きonCreateView()catch句に例外を記録します。

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;
    }
}

これをどのフラグメントクラスonCreateView()に対して行うべきかが明確ない場合があります。その場合、問題の原因となったレイアウトで使用されている各フラグメントクラスに対して行う必要があります。たとえば、OPの場合、例外が発生したアプリのコードは

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

それは

   setContentView(R.layout.activity_main);

そのためonCreateView()、layoutで参照されるフラグメントので例外をキャッチする必要がありますactivity_main

私の場合、根本原因の例外は

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}

この例外は、キャッチしonCreateView()て明示的にログインするまでエラーログに表示されませんでした。ログに記録された後、問題は簡単に診断および修正できました(何らかの理由でフォルダーのdetails_view.xml下にのみ存在しましたldrtl-xhdpi)。重要なのは、問題の原因である例外をキャッチして、それを公開することでした。

これをすべてのフラグメントのonCreateView()メソッドの定型文として実行しても問題ありません。そこにキャッチされない例外がある場合、それは関係なくアクティビティをクラッシュさせます。唯一の違いは、で例外をキャッチしてログに記録した場合、例外onCreateView()が発生した理由がわからなくなることはありません。

PS私はこの答えが@DaveHubbardに関連していることを認識しましたが、根本的な原因を見つけるために別のアプローチを使用しています(ロギングとデバッガー)。


2
あなたはおそらく私にデバッグの時間を節約しました。賞賛!
SzymonSadło2017

16

私は同じ問題、問題を抱えていて、このスレッドのすべての答えを試しても役に立たなかった。私の解決策は、アクティビティXMLにIDを追加していなかったことです。それが問題になるとは思いませんでしたが、問題でした。

だから私はアクティビティXMLで:

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

しかし、持っていたはずです:

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

誰かがこれがなぜであるかについてコメントして喜んでいるならば、私は他の人にとって、すべての耳です、これが役に立てば幸いです。


1
ありがとう、これでうまくいきました。私は何ヶ月もidを省略していましたが、いくつかのレイアウト変更の後に突然クラッシュし始めました。Androidは奇妙です。
erisco 2016年

あなたは私の仕事に答えます。どこでも使用していないのに、なぜid属性を使用するのかと思います。説明してくれませんか?
Moshii

12

これはもう必要ないかもしれませんが、他の読者が参考になれば。まったく同じandroid.view.InflateException:...Error inflating class fragmentです。私はすべての正しいライブラリを含めました。AndroidManifest.xmlファイルにユーザー権限をもう1つ追加することで解決します。<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

ところで私は走っていた Android Studio 0.8.9 on Ubuntu 12.04.


私のために働いた!どうもありがとう!
Dadan 2016年

12

リスナーを実装しなかったため、同じ問題があります。で次のコードを参照してください/*Add This!*/

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

ちなみに、私のフラグメントクラスは次のようなものです:

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);
    }
}

編集:

onCreate機能に例外がある別の状況でも、同じエラーメッセージが表示されますFragment。私は次のようなものを持っています:

@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;
} 

このフラグメントを再利用しているので、引数を設定するのを忘れてしまいました。の結果はgetArguments()ですnull。明らかに、nullここでポインタ例外が発生します。このような間違いにも注意してください。


1
ありがとう!これは大いに役立ちました!
DLee

8

NavigationDrawerFragmentがandroid.support.v4.app.Fragmentを拡張していますか?つまり、正しいパッケージをインポートしていますか?

import android.support.v4.app.Fragment;

6

私もこの問題を抱えていました。インポートを置き換えることで解決しましたMainActivityし、NavigationDrawerFragment

から

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

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

アクティビティでMainActivityActionBarActivityなく拡張するように更新しました

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks

また使用 ActionBar actionBar = getSupportActionBar();ActionBarの取得にします

そして、私は次の関数を更新しました NavigationDrawerFragment

private ActionBar getActionBar()
{
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}

これが正解だと思います。しかし、ActionBarActivityの代わりにAppCompatActivityを使用し(非推奨ではありません)、インポートandroid.app.ActionBarも削除していません(onAttachメソッドが使用しているため)
GramThanos

6

私はこの問題に直面し、次のコードを使用して解決しました。childfragment managerを使用してフラグメントトランザクションを開始していました。

レイアウト:

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

これは私がフラグメントトランザクションを始めた方法です:

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

次のコードは、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;
    }

TY Ali。あなたは私の日を救った!
vm345

正常に動作します。ありがとうございました!
Polyariz 2017

4

オンとオフで同様の問題が発生しました。エラーメッセージは、実際の原因に関係なく、多くの場合、詳細をほとんど提供しません。しかし、もっと役立つ情報を得る方法を見つけました。内部のandroidクラス 'LayoutInflater.java'(android.viewパッケージ内)には、例外を再スローする 'inflate'メソッドがあるが、詳細を取得しないため、原因に関する情報が失われていることがわかります。

私はAndroidStudioを使用して、LayoutInflator行539(作業中のバージョン)にブレークポイントを設定しました。これは、「inflate」メソッドの一般的な例外のキャッチブロックの最初の行です。

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

デバッガーで「e」を見ると、「原因」フィールドが表示されます。実際に何が起こったかについてのヒントを与えるのに非常に役立ちます。これは、たとえば、コードで使用されていない場合でも、インクルードされたフラグメントの親にはIDが必要であることがわかりました。または、TextViewにディメンションの問題があったこと。


3

誰かがこれを必要とする場合に備えて。前提:デバイスの電話がUSBケーブルに接続され、アプリを起動するためのIDEの読み取り。コマンドプロンプトに移動して問題を特定します。adblogcatと入力します

次に、IDEからアプリを起動します。あなたは例外になります。

私の場合:バージョン2.3のAndroidアプリを、ウィジェット「スペース」をサポートしていないモバイルデバイスにデプロイしていました。


3

この問題は、異なるクラス(この場合はビュー)を拡張し、クラスに必要なすべてのコンストラクターをインポートしないカスタムクラスがある場合に発生します。

例:パブリッククラスCustomTextViewはTextView {}を拡張します

このクラスには4つのコンストラクターがあり、いずれかを欠落するとクラッシュします。実際のところ、Lollipopが使用した最後の1つを見逃して、そのコンストラクターを追加して問題なく動作しました。


2

build.gradle(app)に以下を追加する必要もあります

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

新しいレイアウトや新しいデザイン機能を使用しているときはいつでも。これがお役に立てば幸いです。


2

以前の投稿で述べたように、
名前を変更します

android:name="com.fragment.NavigationDrawerFragment"

class = "com.fragment.NavigationDrawerFragment"

それでも、私にはうまくいきませんでした。次に、com.fragmentパーツなしでクラス名を使用しただけで、うまくいきました。だから最終的にそれを変更します

class = "NavigationDrawerFragment"

2

ここでの回答がどれも役に立たなかった後、私はデバッグモードでアプリを実行して、フラグメント内のonCreateViewのすべての行(あなたの場合はNavigationDrawerFragment)を移動することにしました。また、NullPointerExceptionが原因で、フラグメントの膨張が困難であることに気付きました。例えば

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

ここでmySeekBarがnullに設定され(適切なレイアウトでコントロールを追加し忘れていたため)、次の行がNPEに入り、InflateExceptionとして出力されました。また、上記のように、android:nameの名前をclassに変更します。

この問題は、上記のさまざまな理由で発生する可能性があります。何が問題かを知るために、行ごとのデバッグフローをお勧めします。


そして、このエラーはフラグメントのonCreateView()メソッドで発生しましたか?
LarsH

1

これの解決策をまだ見つけていない一部の人にとっては、私の場合、OOM(メモリ不足)の問題が原因で起こっていました。これは、たとえばアプリを長期間使用しているときに、メモリリークが発生した場合に発生する可能性があります。私のスタックトレースでは、これが主な理由でした。


1

これが役立つかどうかはわかりません。

膨張させようとしたレイアウトにあったTextViewでこの問題が発生しました(android.view.InflateException:Binary XML file line#45:Error inflatating class TextView)。

次のXML属性android:textSize = "?android:attr / textAppearanceLarge"を設定しましたを設定していたため、レイアウトを大きくすることができませんでした。

(、理由を正確に知ってはいけない、私はアンドロイドにまだ少し新たなんだ-以下の経験年以上)、システム属性を呼び出すとは何かを持っているかもしれませんIDKの、すべての私の知っているが、すぐに私は、昔ながらのに使用されるようです@ dimen / md_text_16spこれは私の習慣です)、問題は解決しました:)

お役に立てれば...


フラグメントもtextSize android属性もありませんでした。私のエラーは、Widget.Design.TextInputLayout:ではなくTextAppearance.AppCompatを継承するカスタムスタイルを持つTextInputLayoutに関連していました。stackoverflow.com/questions/19874882/...
ジュニアMayhé

1

4.4.2デバイスでこれを使用しましたが、5以上で問題ありません。原因:カスタムビューの初期化内で、TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes)API 21以上のを作成していました。

Android Studio 2.1は、注釈が付いていても不満はありませんTargetApi(21)。どうやら、Android Studio 2.2はこれを修正し、エラーとして適切に表示します。

これが誰かを助けることを願っています。


1

私はパーティーに少し遅れましたが、これらの答えのどれもが私の場合助けにはなりませんでした。SupportMapFragmentおよびPlaceAutocompleteFragmentとしてGoogleマップを使用していました私のフラグメントでは、両方。すべての回答は、問題がSupportMapFragmentが再作成および再描画されるマップであることを示しているためです。

しかし、PlaceAutocompleteFragmentにも問題がありました。SupportMapFragmentSupportMapFragmentのためにこの問題に直面している人のための実用的な解決策はここにあります

 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);

    }

そしてonDestroyViewでSupportMapFragmentと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;
    }


}

1

長い間試行錯誤を繰り返した結果、上記の回答で解決できなかった問題が解決されました。

  1. の代わりにAppCompatActivityあなたのMain活動のために拡張してくださいActivity
  2. 追加android:theme="@style/Theme.AppCompat.Light"にあなたの<Activity..../>中にAndroidManifest.xml
  3. あなたにはNavigationDrawerFragment、クラス、あなたの変更ActionBarにインスタンスを

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

編集

アクティビティレイアウトの間で一貫している必要があります。場合のレイアウトはの一つを有するAPPCOMPATテーマなどなどTheme.AppCompat.Light、あなたの活動をすべきextends AppCompatActivity

ハンバーガーアイコンと、Android Gmailアプリのようなナビゲーションドロワー用意したかったのですが、結局、醜いナビゲーションドロワーになってしまいました。すべての私のクラスの代わりに。extends ActivityAppCompatActivity

私は拡張するためにプロジェクト全体を-織り込み再度AppCompatActivity、その後の上で右クリックして、Layout Folder選択しましたnew- > Activityその後、Navigation Drawer Activityブーム、すべてが私のために行われます!


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

ビューは、膨張に失敗しているものであれば何でもかまいません。この種のエラーは、XMLファイルで参照されているビューのクラス名または名前属性の解決に衝突がある場合に発生します。

同じエラーが発生したとき、UI-XMLファイルですべてをクリーンで安全にしただけで、使用していたビュー、

   <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"/>

マテリアルコンポーネントプロパティを参照するスタイル属性を使用していました。しかし、私のstyles.xmlには...

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

クラス解決が対立に直面していた場所。ビューの属性が、アプリのテーマで定義されていないプロパティを参照しました。マテリアルコンポーネントの適切な親テーマが役立ちました。だから私は親属性を...に変更しました

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

これで問題は解決しました。


0

基本的な問題は、AndroidManifest.xmlで定義されている「android:targetSdkVersion」にあると思います。私の場合、私が定義した初期値:

android:targetSdkVersion=16

私はそれを次のように変更しました:

android:targetSdkVersion=22

これで私のエラーはすべて解決しました。そのため、Androidアプリを構築する前に、正しい「targetSdkVersion」を設定することも重要です。


0

他の誰かがここに来て、答えが問題の解決に役立たない場合は、もう1つ試してください。

他の人が述べたように、これは通常、Javaで間違ったこととは対照的に、XML自体にネストされた問題が原因です。私の場合、修正するのは非常に簡単な(そして愚かな)間違いでした。

私はこのようなコードを持っていました:

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

私がしなければならなかったすべてがシステムがそれを認識できるように「ビュー」でvを大文字にすることでした。カスタムビュー(またはFragments、recyclerviewsなど)のすべてに適切な大文字の宣言があることを確認して、XMLオートコンプリートが適切なビューと一致するようにします。


0

私にもこのエラーがあり、非常に長い間デバッグを行った結果、FrameActivityではなくMainClassがActivityを拡張したことがわかりました。私の場合、xmlは問題ではありませんでした。お役に立てれば幸いです。


0

私の場合 。

私が膨らませようとしていたレイアウトは

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

タグ、削除して修正しました。

Actvity用に設計された以前のレイアウトをビューページャーアダプターに膨らませようとしていました。


0

私のエラーは別の問題が原因で発生しました。

アクティビティからそのフラグメントにバンドルを渡していました。フラグメントでバンドルを受信するコードにコメントすると、エラーは発生しませんでした。結局のところ、私のエラーは以下の「getArguments();」が原因でした。nullを返していた部分。

Bundle args = getArguments();

アクティビティ送信コードを確認したところ、以下に愚かな間違いがあることに気付きました。

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();

矢印に沿って新しいフラグメントを作成していました。それに対して、すでにバンドルされている事前にインスタンス化されたフラグメントを使用する必要がありました。だからそれはそうだったはずです:

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();

なぜNPEではなくこのエラーがスローされるのか正確にはわかりませんが、誰かが同じシナリオを持っている場合に備えてこれで私のエラーは解決しました


0

私は同じ問題を抱えていました、私の場合、パッケージ名が間違っていたので、それを修正して問題を解決しました。



0

このエラーは、自分のRecyclerViewをfragment.xmlのルートに置いたときに発生しました。

しかし、ViewGroupでラップすると、アプリは正常に動作しました。


0

この名前フィールドをナビゲーションに追加します

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">
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.