2 つのフラグメントと 1 つのフレーム レイアウトの 3 つの垂直パネルでレイアウトを作成しようとしています。1 番目のフラグメントは選択時のリストになり、2 番目のフラグメントは異なるコンテンツになります。2 番目のフラグメントからリスト項目を選択すると、3 番目のペインに詳細が表示されます。
ここに私のレイアウトファイルがあります:
activity_three_pane.xml:
<LinearLayout 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"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context=".ActivitySectionList" >
<fragment
android:id="@+id/frg_section_list"
android:name="eam.droid.pt.entholkaappiyam.FragmentSectionList"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@android:layout/list_content" />
<fragment
android:id="@+id/frg_chapter_list"
android:name="eam.droid.pt.entholkaappiyam.FragmentChapterList"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@android:layout/list_content" />
<FrameLayout
android:id="@+id/fl_chapter_detail"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
activity_section_list.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frg_section_list"
android:name="eam.droid.pt.entholkaappiyam.FragmentSectionList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
tools:context=".ActivitySectionList"
tools:layout="@android:layout/list_content" />
activity_chapter_list.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frg_chapter_list"
android:name="eam.droid.pt.entholkaappiyam.FragmentChapterList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
tools:context=".ActivityChapterList"
tools:layout="@android:layout/list_content" />
activity_chapter_detail.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fl_chapter_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivityChapterDetail"
tools:ignore="MergeRootFrame" />
Java コードは次のようになります。
ActivitySectionList.java
public class ActivitySectionList extends FragmentActivity implements FragmentSectionList.Callbacks
FragmentSectionList.java
public class FragmentSectionList extends ListFragment
ActivityChapterList.java
public class ActivityChapterList extends FragmentActivity implements FragmentChapterList.Callbacks
FragmentChapterList.java
public class FragmentChapterList extends ListFragment
ActivityChapterDetail.java
public class ActivityChapterDetail extends FragmentActivity
FragmentChapterDetail.java
public class FragmentChapterDetail extends Fragment
しかし、アプリケーションは Inflate Exception と IllegalStateException でクラッシュします。過去2日間試していますが、問題がどこにあるのかわかりません。誰かがそれについて考えている場合は、返信してください。
私が気づいたことの1つは、画面全体で個々のフラグメントを取得する電話で正常に動作することです。しかし、画面上に 3 つのフラグメントを収めようとするタブレットではクラッシュします。デバッグしてみると、FragmentChapterList.java の OnAttach が ActivityChapterList.java の onCreate より先に呼び出されることがわかりました。そのため、IllegaltStateException: アクティビティはフラグメントのコールバックを実装する必要があります。そのため、ActivitySectionList.java 内に両方のフラグメント コールバックを実装しようとしました。
このような:
public class ActivitySectionList extends FragmentActivity implements FragmentSectionList.Callbacks, FragmentChapterList.Callbacks
その後、タブレットで正常に動作します。ただし、電話でチャプター リストを取得することはできません。
これが私のlogcatです:
02-12 14:14:55.858: E/AndroidRuntime(989): FATAL EXCEPTION: main
02-12 14:14:55.858: E/AndroidRuntime(989): java.lang.RuntimeException: Unable to start activity ComponentInfo{eam.droid.pt.entholkaappiyam/eam.droid.pt.entholkaappiyam.ActivitySectionList}: android.view.InflateException: Binary XML file line #20: Error inflating class fragment
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.os.Looper.loop(Looper.java:137)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-12 14:14:55.858: E/AndroidRuntime(989): at java.lang.reflect.Method.invokeNative(Native Method)
02-12 14:14:55.858: E/AndroidRuntime(989): at java.lang.reflect.Method.invoke(Method.java:511)
02-12 14:14:55.858: E/AndroidRuntime(989): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-12 14:14:55.858: E/AndroidRuntime(989): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-12 14:14:55.858: E/AndroidRuntime(989): at dalvik.system.NativeStart.main(Native Method)
02-12 14:14:55.858: E/AndroidRuntime(989): Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class fragment
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
02-12 14:14:55.858: E/AndroidRuntime(989): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.Activity.setContentView(Activity.java:1867)
02-12 14:14:55.858: E/AndroidRuntime(989): at eam.droid.pt.entholkaappiyam.ActivitySectionList.onCreate(ActivitySectionList.java:20)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.Activity.performCreate(Activity.java:5008)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
02-12 14:14:55.858: E/AndroidRuntime(989): ... 11 more
02-12 14:14:55.858: E/AndroidRuntime(989): Caused by: java.lang.IllegalStateException: Activity must implement fragment's callbacks.
02-12 14:14:55.858: E/AndroidRuntime(989): at eam.droid.pt.entholkaappiyam.FragmentChapterList.onAttach(FragmentChapterList.java:84)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:867)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280)
02-12 14:14:55.858: E/AndroidRuntime(989): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
どこが間違っているのか教えてもらえますか?誰かが 3 つの垂直パネル (2 つのリストと 1 つの詳細) のチュートリアルまたは例に出くわした場合は、それを教えてください。
詳細なシナリオは次のとおりです。