web-dev-qa-db-ja.com

クラスフラグメントの膨張エラー

エラーになります

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: Android.view.InflateException: Binary XML file line #11: Error inflating class fragment

ポートレートモードとランドスケープモードを切り替えるとフラグメントを使っています。私のxmlは:

 <LinearLayout Android:id="@+id/mainLayout"
               Android:orientation="horizontal"
               Android:layout_width="fill_parent"
               Android:layout_height="wrap_content" >

    <ListView Android:id="@+id/Android:list"
              Android:layout_height="wrap_content"
              Android:layout_width="fill_parent"/> 

    <fragment Android:id="@+id/fragmentDetails"
              Android:layout_height="fill_parent"
              Android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>

横長モードと縦長モードを切り替えてもすべてうまくいきます。しかし、私が自分のフラグメントをクリックすると(そして自分のフラグメントを見ることができます)、そして他のモードに切り替えると、エラーが発生します。どのように私はそれを解決することができますか?ここでいくつかの答えを見つけましたが、これらのどれも私を助けてくれませんでした...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   Android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.handleRelaunchActivity(ActivityThread.Java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.access$1600(ActivityThread.Java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.os.Looper.loop(Looper.Java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.main(ActivityThread.Java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Java.lang.reflect.Method.invoke(Method.Java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: Android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.inflate(LayoutInflater.Java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.inflate(LayoutInflater.Java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.view.LayoutInflater.inflate(LayoutInflater.Java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.Activity.setContentView(Activity.Java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.Java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     ... 12 more
147
tsync

Hdemirchianが言ったように、必ず使うこと:

import Android.support.v4.app.Fragment;

また、フラグメントを使用しているアクティビティが、通常のFragmentActivityではなくActivityに拡張されていることも確認してください。

import Android.support.v4.app.FragmentActivity;

FragmentActivityクラスを取得します。

124
Dandre Allison

getActivity()が呼び出される前にフラグメントの中でonActivityCreated()を操作した場合、例外Android.view.InflateException: Binary XML file line: #... Error inflating class fragmentが発生する可能性があります。そのような場合、あなたは間違った活動参照を受け取り、それに頼ることはできません。

例えば、次のパターンは間違っています:

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

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...); - another problem: button is null

    return view;
}

正しいパターン1

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

    Button button = view.findViewById(R.id...);
    button.setOnClickListener(...);

    return view;
}

正しいパターン2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}
90
Grigori A.

ActivityFragmentActivityを拡張していることを確認してください。

53
binnyb

私は同じエラーがありました。私は一日中掘っていましたが、私はこの問題について25の解決策を試したと思います。午前2時に私がアプリマニフェストxmlでこの行を見逃していたことがわかったまでは、何もうまくいきませんでした。

<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />

その行は<application>タグの内側にありました。これが誰かに役立つことを願っています。 GL。

33
Matiss Jurgelis

私は同じ問題を抱えていました。私にとっての解決策は、FragmentActivity内のsuper.onCreateとsetContentViewの順序でした。

次の順序でうまくいきます。

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);
22
Wilko

フラグメントはXMLにネストできません

これを難しい方法で学びました - FragmentManagerから(潜在的に)動的にロードされたフラグメントの中にXMLレイアウトベースの<fragment>タグをネストすると、フラグメントxmlを膨らませようとして奇妙なエラーが発生し始めます。

結局、これはnot supportedです - 純粋にFragmentManagerアプローチでこれを行えばうまくいきます。

Xmlから<DrawerLayout>内のフラグメントをロードしようとしていたため、この問題が発生していました。バックスタックをポップしたときにonCreateView()メソッドでクラッシュが発生していました。

17
Dhiraj Gupta

私はあなたが直面しているのと同じ問題を抱えていました。上のヒントはどれも私を助けてくれませんでした。その後、私がしなければならなかったのは、以下からインポートを修正することだけであることがわかりました。

import Android.app.Fragment;

に:

import Android.support.v4.app.Fragment;
16
hdemirchian

フラグメントのonCreateViewメソッドで発生した例外がないことを確認してください。このメソッドで例外が発生した場合、logcatは例外の正確な詳細を表示せずに、常にメッセージを表示します。

Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.view.fragment" 
on path: DexPathList[[Zip file "/data/app/com.package/base.apk"],
nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
12
Lei

やってみました:

 <fragment
            Android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            Android:layout_width="fill_parent"
            Android:layout_height="fill_parent" />
10
Blundell

TaskDetailsFragmentAndroid.app.Fragmentを拡張している場合は、onCreateView()を変更してください。

フラグメントに表示するviewを返すか、LayoutInflaterを使用してレイアウトをビューに変換してから返します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mainview = inflater.inflate(R.layout.main, null);
    return mainview;
}

これがうまくいくことを願っています。 :)

6
Suryavel TR

クラスパスを確認してください。これはビューインフレータがxml class = "de.androidbuch.activiti.task.TaskDetailsFragment"で定義されているクラス定義を見つけることができなかった可能性があるため、上記のパスが間違っている可能性があります。

5
mask

さまざまな理由でこのエラーを受け取りました。

再現する手順:

〜>私の問題は、私がまったく新しい空白のアプリケーションを作成したことです。

〜>それから私はファイル〜>新規ファイルメニューからカスタムフラグメントを生成しました。

〜>レイアウトやボタンなどを追加してフラグメントをカスタマイズしました.

〜>アプリケーションを作成するときに私のために生成された自動生成されたactivity_my.xmlで新しいカスタムフラグメントを参照しました。こうすることでXMLは私に代わってオブジェクトを生成することができました。

File〜> New File Menuでカスタムフラグメントを生成するとき、Heresはインターフェース関数スタブを自動的に生成してフラグメントクラスファイルの一番下に配置します。

これはあなたのMyActivityクラスがこのインターフェースを実装しなければならないことを意味します。そうでない場合、上記のエラーはxmlからフラグメントを参照するときにのみ発生します。 XML内のフラグメントの参照を完全に削除し、MyActivity.Javaクラスファイルのコードを使用してフラグメントを作成することで、Logcatは問題を詳細に説明し、インターフェイスについて不平を言うより簡潔なエラーを生成します。これはプロジェクトテンプレートのActivity + Fragmentで示されています。ただし、そのプロジェクトテンプレートではインターフェイススタブは生成されません。

5
xMythicx

私にとっては、スタックトレースをスクロールした後、私はAndroid.permission.ACCESS_NETWORK_STATEのパーミッションが欠けているのを発見しました。

この権限を追加した後、それは修正されました

5
Gil

ポートレートモードとランドスケープモード用に別々のレイアウトファイルがあり、アイテムをクリックした後に向きを変更するたびにインフレーションエラーが発生する場合は、レイアウトファイル間に食い違いがある可能性があります。

エラーが発生したのは、横モードでアイテムをクリックしたときだけですか。 TaskDetailsFragmentアクティビティは、横長モードと縦長モードの間に矛盾がある可能性があるレイアウトファイルを使用していますか?

4
Nathan Fig

この場合の私の問題は、ライフサイクルの後半で呼び出されていた私のメソッドの1つで、ダムNULLポインター例外が発生するという単純な例でした。これは私にとって "Error inflating class fragment"例外を引き起こしていました。手短に言うと、考えられる原因については例外スタックトレースのさらに下の部分をチェックすることを忘れないでください。

Nullポインタ例外を解決すると、フラグメントは正常に読み込まれました。

3
oddmeter

上記の解決策のどれも私を助けませんでした。ログで、私は以下に述べるように例外の詳細を見つけることができました:

06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: Java.lang.RuntimeException: API key not found.  Check that /meta-data/ Android:name="com.google.Android.maps.v2.API_KEY" Android:value="your API key"/ is in the application element of AndroidManifest.xml.

私はこれをしました、そして私のコードは働いていました!

<meta-data  Android:name="com.google.Android.maps.v2.API_KEY" Android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>
3
Khushboo

何も変更したくない場合は "fragment"タグを付けてください

これを行う、

<fragment
 Android:visibility="gone" (Visibility will not work, just helps in removing frag from xml viewer)(If you want the visibility to be gone make it in your fragment root element visibility=gone)
 Android:layout_width="match_parent"
 Android:layout_height="match_parent"
 Android:name="com.example.YOUR_FRAGMENT" (This is important)
 />
2
Sahaj Rana

Logcatとまったく同じエラーメッセージが表示された同じエラータイプがありました。 Project->Propertiesの下にあるJava Build Pathを変更する必要がありました。 Android-support-v4.jargoogle-play-services.jarのようなGoogleマップ関連のライブラリを含めました。しかし、'Build class path'オプションメニューの'Order and Export'にこれらを含めることができませんでした。多分エラーはここにあります。

ライブラリをビルドクラスパスに含めるようにしてください。

クラスの構築順序によってもエラーが発生する可能性があるため、構築パスの順序を並べ替えることをお勧めします。 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'の順に使用するとエラーは消えました。最後のユニットには、前述のjarファイルが含まれています。

Fragmentを静的に、つまりxmlで追加する場合は、OnFragmentInteractionListenerクラスにActivityを実装しなかった可能性があります。それからインタフェースの実装は問題を解決するでしょう。動的に、つまりJavaクラスでFragmentを追加するのであれば、これは解決策ではありません。 IDE自体では、必要なインタフェースを実装せずに先に進むことはできません。

2

これと同じエラーがありました。私の理由は私のフラグメントクラスの可視性でした。デフォルトに設定されています。パブリックにする必要があります。

1
southerton

あなたがこれを使ったことを確かめなさい

<meta-data
            Android:name="com.google.Android.maps.v2.API_KEY"
            Android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

これではない..

<meta-data 
         Android:name="com.google.Android.gms.version" 
          Android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" /> 
1
DjP

私は同様の問題を抱えていました。 AdMobの例 を実行した後、私は自分のアプリに広告を挿入しようとしましたが、このエラーが発生しました。

01-02 16:48:51.269    8199-8199/it.dndc.BreathPlot E/AndroidRuntime﹕ FATAL EXCEPTION: main
Java.lang.IllegalStateException: Could not execute method of the activity
 Caused by: Android.view.InflateException: Binary XML file line #57: Error inflating class fragment

解決策は次のとおりです。広告のフラグメントをListActivityに挿入することはできません。代わりに、FragmentActivityとActionBarActivityに問題なく追加できます。

私の提案は:AdMobの例から始めて、それにあなたの既存のアプリを追加する:私は多くの時間を節約できただろう!

1
user2270629

AppCompatActivityを継承したい場合は、このようにすることができます。アクティビティxmlでは、FrameLayoutをこのように使用します。

<FrameLayout
    Android:id="@+id/result_fragment"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_below="@+id/progress_frame"/>

アクティビティ内でonCreate-

final FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = supportFragmentManager.beginTransaction();
    ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
    ft.commitAllowingStateLoss();
1
Vaibhav Sharma

あなたのxmlファイルでは単にタグの代わりにを使ってください。インフレータはAndroid.app.Fragmentを作成しようとしますが、そこからAPI <10で失敗します。そのため、異なるタイプのビューグループを作成する必要があります。

1
Lucas de Vil

ある日の闘争の後、私はシナリオチェックを見つけました。

すべてがGoogleコードと同じように動作しているのであれば、私の場合はマニフェストファイルをチェックしてください。

注 - マニフェストファイルに2つのキーを追加してマップキーを削除しないでください

meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="@string/google_maps_key"/>

上記のコードを追加して、このコードを追加してください。

 <meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/auto_location"/>

 <meta-data
        Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version"/>
1
Yogesh Rathi

フラグメントのonCreateおよびonCreateViewメソッドを投稿してもらえますか。フラグメントonCreateメソッドの例外が原因で発生したものとまったく同じ例外が発生しました。この問題を解決すると、クラスフラグメントのエラーを修正しました。

1
AdamVe

ListFragmentを使用したときにこのエラーが発生しましたが、リストビューIDはlistではなくlistView1でした。

'あなたのコンテンツはid属性が' Android.R.id.list 'のListViewを持っている必要があります

http://developer.Android.com/reference/Android/app/ListFragment.html

1
Eric Woodruff

Androidスタジオでこのエラーを受信して​​いました。問題は、OnCreateView関数のコードが相対レイアウトであるのに対し、フラグメントが相対レイアウトであることでした。

mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);

あなたのコードは同じことをしていますか?

1
Ahmad Moussa

私は同じエラーを得ました、しかし私の問題は私のフラグメントが親活動のxmlレイアウトにidを持っていなかったということでした。

1
stevethecollier

私の場合、

...
Android.view.InflateException: 
Binary XML file line #24: Error inflating class fragment
...
Caused by: Java.lang.InstantiationException: 
class *.HomeFragment has no zero argument constructor
...

空のコンストラクタを追加した後は解決しました。

public HomeFragment() {}
0
TonnyTao

これがこの問題に対する私の解決策です。

Caused by: Android.view.InflateException: Binary XML file line #31: Error inflating class fragment
Caused by: Java.lang.IllegalArgumentException: Binary XML file line #31: Duplicate id 0x7f09006d, tag null, or parent id 0xffffffff with another fragment for com.example.eduardf.audit.DateTime

私の場合は、DialogFragmentをFragmentで再度開くとエラーが発生しました。

<Android.support.constraint.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">
        <TextView
            Android:id="@+id/title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:drawableStart="@drawable/ic_black_edit_24px"
            Android:singleLine="true" />
        <fragment
            Android:id="@+id/fragment_date"
            Android:name="com.example.eduardf.audit.DateTime"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            tools:layout="@layout/fragment_date_time" />
    </LinearLayout>
</Android.support.constraint.ConstraintLayout>

DailogFragmentは最初の膨張後のフラグメントを保存します。これを防ぐために、私はフラグメントを強制的に削除しました。

@Override
public void onDestroyView () {
    if (!(afterRotate || getActivity() == null)) {
        final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        final Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_date);
        if (fragment != null)
            fragmentManager.beginTransaction().remove(fragment).commit();
    }
    super.onDestroyView();
}

また、画面を回転させたときなどに、不要なフラグメントの削除に注意する必要がありました。

private boolean afterRotate = false;
...
@Override
public void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState(outState);
    afterRotate = true;
}
0
Eduard Fomin

あなたのフラグメントがリストフラグメントの場合、そのフラグメントを使用するアクティビティはonFragmentInteractionインターフェースを実装しなければなりません。

0

私の簡単な方法

あなたのxmlで<fragment>を使うなら、あなたはname属性を提供しなければなりません。

      <fragment 
        Android:name='path.to.your.fragment
        />`

これはあなたのフラグメントを初期化し、あなたはJavaからそれをする必要はありません。

その場合、フラグメントを追加するためにJavaアプローチを使用したい場合は、次のようなレイアウトを使用してください。

<LinearLayout
   Android:id="@+id/fragment_container"
 />

そしてあなたのフラグメントのためにこのコンテナを使ってください

transaction.replace(R.id.fragment_container, fragment_obj);
0
Santosh Kumar

アクティビティがFragmentActivityまたはAppCompatActivityを拡張していることを確認してください。

0
Riyas PK

それぞれのフォルダにgoogle-services.jsonを置いて、明らかに追加するようにしてください。

<meta-dataandroid:name="com.google.Android.geo.API_KEY" Android:value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />

マニフェストファイルに「実装 'com.google.Android.gms:play-services-maps:15.0.1'」であなたの評価を確認してください。

それが動作します。

0