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