Същността на проблема е следната: Опитвам се да стартирам DialogFragment от FragmentActivity. Изгледът на този DialogFragment съдържа FrameLayout, който бих искал да попълня с фрагмент. По принцип FragmentActivity стартира DialogFragment, след което DialogFragment попълва своя 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" />
This is my DialogFragment's layout (file name is "dialog_overview"):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/dialog" >
<FrameLayout
android:id="@+id/frameDisplay"
style="@style/frame" />
This is my Fragment's layout (file name is "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>
Here is the java code for my FragmentActivity:
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)
Актуализация: Премахнах кода за зареждане на моя фрагмент в DialogFragment и DialogFragment сега се показва без проблем. Така че очевидно (както подсказва грешката в logcat) има нещо нередно със самия ми фрагмент... въпреки това той съвпада с примери, които съм виждал в интернет. Което ме кара да се чудя: Има ли проблем с влагането на фрагменти по този начин? FragmentActivity, показващ DialogFragment, който показва Fragment, ме кара да искам да се пошегувам, че „не можем да отидем по-дълбоко“, но не знам. Мога ли да вложа повече фрагменти?