0

これが契約です。ユーザーがログインしてレポートを表示する簡単なアプリケーションがあります。これらのレポートの基本的なアーキテクチャは、ユーザーのログイン情報を表示するヘッダー フラグメント、レポート コンテンツを保持するテーブル レイアウト、および提供するすべてのレポートのオプション メニューを作成したフッター フラグメントで構成されます。現在、レポートごとに異なるアクティビティがあり、次のように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()は別のクラスにあり、データベースから表示される項目を取得するなどの処理を行います。

また、cononAttach()イベントactivity.getApplicationContext();にあります

4

0 に答える 0