これが契約です。ユーザーがログインしてレポートを表示する簡単なアプリケーションがあります。これらのレポートの基本的なアーキテクチャは、ユーザーのログイン情報を表示するヘッダー フラグメント、レポート コンテンツを保持するテーブル レイアウト、および提供するすべてのレポートのオプション メニューを作成したフッター フラグメントで構成されます。現在、レポートごとに異なるアクティビティがあり、次のようにonOptionsItemSelected()からこれらのアクティビティを開始/起動します。
getActivity().startActivity(intent);
最初のレポート、メニュー、およびそのすべての項目が完全に読み込まれます。しかし、メニューからメニュー項目を選択すると、アプリは次の例外の発生を停止します:
04-04 18:29:49.670: E/AndroidRuntime(1123): java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.example/com.example.Report2}:
android.view.InflateException: Binary XML file line #10: Error inflating class fragment
次のアクティビティにもこれらのフラグメント(ヘッダーとフッター)が含まれているため、これが起こっていると推測しています。私のアプローチは間違っていますか?私はネットで調べていますが、たくさんの情報が最後に私を混乱させます。どんな助けでも大歓迎です!
*編集:*
レポート 1 のレイアウト XML
<?xml version="1.0" encoding="utf-8"?>
<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:baselineAligned="false"
android:gravity="center"
android:orientation="vertical">
<fragment
android:name="com.example.HeaderFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center_horizontal"
tools:layout="@layout/header_fragment" />
<TableLayout
android:id="@+id/tblSummRep"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:padding="5dip">
</TableLayout>
<fragment
android:name="com.example.FooterFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center_horizontal"
tools:layout="@layout/footer_fragment" />
</LinearLayout>
上記のレイアウトはすべてのレポートで同じです
メニュー項目をルーティングするためのコード (フッター フラグメントのクラス内) は次のとおりです。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
int switchTo = mm.routeMenu(item, con);
switch (switchTo) {
case 2:
intent = new Intent(con, Report2.class);
isAct = "Y";
break;
case 3:
intent = new Intent(con, Report3.class);
isAct = "Y";
break;
case 4:
intent = new Intent(con, Report4.class);
isAct = "Y";
break;
case 5:
intent = new Intent(con, Report5.class);
isAct = "Y";
break;
case 6:
intent = new Intent(con, Report6.class);
isAct = "Y";
break;
default:
super.onOptionsItemSelected(item);
}
if(isAct.toUpperCase().equals("Y")){
if(Login.lstLogin != null){
getActivity().startActivity(intent);
}
}
return true;
}
mm.RouteMenu()は別のクラスにあり、データベースから表示される項目を取得するなどの処理を行います。
また、conはonAttach()イベントactivity.getApplicationContext();
にあります