6

問題の要点は次のとおりです。 FragmentActivity から DialogFragment を起動しようとしています。この DialogFragment のビューには、Fragment を入力したい FrameLayout が含まれています。基本的に、FragmentActivity は DialogFragment を起動し、DialogFragment は FrameLayout に Fragment を設定します。私はインターネットでチュートリアルを探し回り、(私の考えでは)うまくいくはずのものをまとめました。ただし、何を試しても、継続的にエラーが発生します。これは私がこれまでに持っているものです:

これは私の FragmentActivity のレイアウトです (ファイル名は「activity_interact」です):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/activity" >
<Button
        android:id="@+id/btnLaunchDialog"
        style="@style/btn" />

これは私のDialogFragmentのレイアウトです(ファイル名は「dialog_overview」です):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/dialog" >
<FrameLayout
    android:id="@+id/frameDisplay"
    style="@style/frame" />

これは私のフラグメントのレイアウトです(ファイル名は「fragment_stats」です):

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/table" >
<TableRow style="@style/table" >
    <TextView
        style="@style/display"
        android:gravity="right"
        android:text="@string/textStr" />
</TableRow>

FragmentActivity の Java コードは次のとおりです。

public class ActivityInteract extends FragmentActivity implements
    OnClickListener {

Button btnLaunchDialog;

@Override
protected void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.activity_interact);
    btnLaunchDialog = (Button) findViewById(R.id.btnLaunchDialog);
    btnLaunchDialog.setOnClickListener(this);
}

public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btnLaunchDialog:
            FragmentManager fm = getSupportFragmentManager();
            DialogOverview dialogOverview = new DialogOverview();
            dialogOverview.show(fm, "dialog_overview");
            break;
    }
}

}

これが私のDialogFragmentのコードです:

public class DialogOverview extends DialogFragment implements OnClickListener {

public DialogOverview() {

}
@Override
public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b) {
    View view = li.inflate(R.layout.dialog_overview, vg);
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.frameDisplay, new FragmentStats());
    ft.commit();
    return view;
}

}

ここに私のフラグメントのコードがあります:

public class FragmentStats extends Fragment {

@Override
public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b) {
    View view = li.inflate(R.layout.fragment_stats, vg);
    return view;
}

}

最後に、logcat エラーは次のとおりです。

06-11 10:07:29.382: E/AndroidRuntime(30013): java.lang.IllegalArgumentException: No view found for id 0x7f060003 for fragment FragmentStats{4169c928 #1 id=0x7f060003}

私はフラグメントのビューを持っていないと言っていることがわかりますが、私は... (または私は?) 私はここで迷っています。また、私はこれを正しい方法で行っていますか? FragmentManager を再利用する方が効率的でしょうか? (つまり、FragmentActivity から DialogFragment に渡します)

更新: Fragment を DialogFragment にロードするコードを削除しました。現在、DialogFragment は問題なく表示されます。したがって、明らかに (logcat エラーが示唆するように) Fragment 自体に何か問題があります...ただし、インターネットで見た例と一致します。このようにネストされたフラグメントに問題はありますか? Fragment を表示する DialogFragment を表示する FragmentActivity を見て、「これ以上深くは考えられない」と言いたくなりますが、わかりません。さらにフラグメントをネストできますか?

4

1 に答える 1