У меня проблема с обратным захватом вложенных фрагментов и была бы очень благодарна за любую помощь, которая предлагается.Android Backstack с вложенными/дочерними фрагментами
У меня есть фрагмент A и фрагмент B. Фрагмент A содержит другой фрагмент (ButtonFragment). В onCreate of Activity я загружаю фрагмент A, а затем переключаюсь на фрагмент B. Когда я возвращаюсь к фрагменту A (из задней части), я получаю следующую ошибку.
Исключение отправки готового сигнала.
E/MessageQueue-JNI (6330): Исключение в MessageQueue обратного вызова: handleReceiveCallback
E/MessageQueue-JNI (6330): android.view.InflateException: Binary XML файл строка # 16: Ошибка при наполнении класса фрагмент
...
Вызванные: java.lang.IllegalArgumentException: строка файл Binary XML 16: Дублирование идентификатора 0x7f080000, тег нулевого или родительский 0x0 ID с другим фрагментом для com.example.fragmentnavigation. M ainActivity $ ButtonFragment
Без подфрагмента работает навигация. Возможно, мне нужно добавить обработку ChildFragmentManager, но я не знаю, что и где. Я надеюсь, что вы можете мне помочь.
MainLayout
<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:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.example.fragmentnavigation.MainActivity"
tools:ignore="MergeRootFrame" />
</LinearLayout>
фрагмента макета
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.fragmentnavigation.MainActivity$FragmentA" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<fragment
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.example.fragmentnavigation.MainActivity$ButtonFragment"/>
</LinearLayout>
MainAcitivity
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new FragmentA()).commit();
}
}
...
private void switchToB() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, new BFragment());
ft.addToBackStack(null);
ft.commit();
}
фрагмента А
public static class FragmentA extends Fragment {
public FragmentA() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
ButtonFragment
public static class ButtonFragment extends Fragment {
public ButtonFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.buttonfragment, container,
false);
return rootView;
}
}
Решение Отдельное спасибо @ Арун Кумар-
действительно хороший обзор о фрагментах https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments
Фрагмент макета
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.fragmentnavigation.MainActivity$FragmentA" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<FrameLayout
android:id="@+id/child_fragment_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
OnCreate из фрагмента А
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
Fragment childFragment = new ButtonFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.child_fragment_container, childFragment).commit();
return rootView;
}
great - thank you. К сожалению, мне нужно 15 репутаций для голосования;) –
спасибо. что помогло me alot – deepak825