问题的要点是:我正在尝试从 FragmentActivity 启动 DialogFragment。这个 DialogFragment 的视图包含一个 FrameLayout,我想用 Fragment 填充它。基本上,FragmentActivity 启动 DialogFragment,然后 DialogFragment 用 Fragment 填充它的 FrameLayout。我已经在互联网上搜索了教程,并且拼凑了一些(在我看来)应该有用的东西。但是,无论我尝试什么,我都会不断出错。这是我到目前为止所拥有的:
这是我的 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 的布局(文件名为“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}
我可以看到它说我对 Fragment 没有看法,但我有……(或者我有吗?)我在这里迷路了,任何帮助将不胜感激。另外,我是否以正确的方式进行此操作?重用 FragmentManager 会更有效吗?(即将它从 FragmentActivity 传递到 DialogFragment 中)
更新:我删除了将我的 Fragment 加载到 DialogFragment 的代码,DialogFragment 现在显示没有问题。所以很明显(正如 logcat 错误所暗示的那样)我的 Fragment 本身有问题......但是,它与我在互联网上看到的示例相匹配。这让我想知道:以这种方式嵌套片段是否存在问题?显示 Fragment 的 DialogFragment 的 FragmentActivity 让我想打趣说“我们不能再深入了”,但我不知道。我可以嵌套更多的片段吗?