0

リストと詳細ビューを並べて表示するために、新しいプロジェクトの作成時に使用できるマスター/詳細フローのクラスと xml レイアウトを使用しています。ただし、次のエラーが発生します。

E/AndroidRuntime(  724): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.TrueFalse/com.TrueFalse.news.NewsModule}: android.view.InflateException: Binary XML file line #14: Error inflating class fragment
E/AndroidRuntime(  724):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
E/AndroidRuntime(  724):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
E/AndroidRuntime(  724):    at android.app.ActivityThread.access$1500(ActivityThread.java:123)
E/AndroidRuntime(  724):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
E/AndroidRuntime(  724):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  724):    at android.os.Looper.loop(Looper.java:126)
E/AndroidRuntime(  724):    at android.app.ActivityThread.main(ActivityThread.java:3997)
E/AndroidRuntime(  724):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  724):    at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(  724):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime(  724):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime(  724):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  724): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class fragment
E/AndroidRuntime(  724):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
E/AndroidRuntime(  724):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
E/AndroidRuntime(  724):    at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
E/AndroidRuntime(  724):    at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
E/AndroidRuntime(  724):    at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
E/AndroidRuntime(  724):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224)
E/AndroidRuntime(  724):    at android.app.Activity.setContentView(Activity.java:1777)
E/AndroidRuntime(  724):    at com.TrueFalse.news.NewsModule.onCreate(NewsModule.java:19)
E/AndroidRuntime(  724):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
E/AndroidRuntime(  724):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
E/AndroidRuntime(  724):    ... 11 more
E/AndroidRuntime(  724): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  724):    at java.lang.VMClassLoader.findLoadedClass(Native Method)
E/AndroidRuntime(  724):    at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:390)
E/AndroidRuntime(  724):    at java.lang.ClassLoader.loadClass(ClassLoader.java:538)
E/AndroidRuntime(  724):    at java.lang.ClassLoader.loadClass(ClassLoader.java:508)
E/AndroidRuntime(  724):    at android.support.v4.app.Fragment.instantiate(Fragment.java:391)
E/AndroidRuntime(  724):    at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
E/AndroidRuntime(  724):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
E/AndroidRuntime(  724):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:660)
E/AndroidRuntime(  724):    ... 20 more

スタック トレースを説明する android:name="" または class="" を設定していないという事実と関係があると思われますが、上記のテンプレートには、これとは別に、この同じ xml ファイルがありました。いくつかの名前を変更します。

私のコードのトレースの行番号は

setContentView(R.layout.news_list_container);

私の NewsModule クラスは android.support.v4.app.FragmentActivity を拡張します。


/res/values-large/refs.xml (news_list_container.xml を news_twopane_container.xml にマップします。「large: 制約」を満たさないデバイスでも問題なく動作するため、これが起こると確信しています。)

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- List of layout overrides for screens that can support iPad style views.
         This should mirror the other refs.xml file-->
    <item name="news_list_container" type="layout">@layout/news_twopane_container</item>
</resources>

/res/layout/news_twopane_container.xml (14 行目は 2 番目のフラグメントの始まりです)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/news_list_container"
        android:name="com.TrueFalse.news.NewsList"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

    <fragment
        android:id="@+id/news_detail_container"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

</LinearLayout>
4

2 に答える 2

3

テンプレートを使用していたとき、2 番目のフラグメントが実際にはフラグメントのプレースホルダーである必要があるという事実を見落としていました。これはテンプレートでは FrameLayout でした。フラグメントにはそれに関連付けられたクラスが必要であるため、私の当初の疑いが問題であることが判明しました。/res/news_twopane_container.xml は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/news_list_container"
        android:name="com.TrueFalse.news.NewsList"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />
    <!-- NOT fragment, because we don't have data to put here yet -->
    <FrameLayout
        android:id="@+id/news_detail_container"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

</LinearLayout>
于 2013-01-23T05:27:30.367 に答える
0

onCreate メソッドを onCreateView に置き換えて、これを試してみてください。これはあなたに役立つかもしれないと思います。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(LOG_TAG, "Loading Container with news_container.xml");
        setContentView(R.layout.news_list_container);
--------------------------------------------------------------------------

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.news_list_container, container, false);
}
于 2013-01-23T04:34:48.637 に答える