Android

Replacing a fragment with another fragment inside activity group

Замена фрагмента другим фрагментом внутри группы действий

У меня есть фрагмент внутри группы действий, и я хочу заменить его другим фрагментом:

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
SectionDescriptionFragment bdf = new SectionDescriptionFragment();
ft.replace(R.id.book_description_fragment, bdf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();

Это работает нормально, когда это выполняется как отдельный проект без использования группы действий, все работает нормально в log cat, поскольку управление переходит внутрь getview (), но представление не отображается, даже не возникает никаких исключений, я хочу, чтобы фрагмент сведений о книге был заменен фрагментом сведений о разделе.

XML фрагмента сведений о книге имеет идентификатор book_description_fragment, а xml фрагмента описания раздела имеет идентификатор section_description_fragment.

Приведенный выше код находится в методе onClick элемента, я хочу, чтобы, когда пользователь нажимал на элемент в режиме горизонтальной прокрутки, фрагмент изменялся.

Переведено автоматически
Ответ 1

Фрагменты, жестко закодированные в XML, не могут быть заменены. Если вам нужно заменить фрагмент другим, вы должны были добавить их динамически, в первую очередь.

Примечание: R.id.fragment_container - это макет или контейнер по вашему выбору в activity, в который вы добавляете фрагмент.

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack if needed
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();
Ответ 2

Пожалуйста, ознакомьтесь с этим Вопросом

Вы можете заменить только "динамически добавляемый фрагмент".

Итак, если вы хотите добавить динамический фрагмент, смотрите Этот пример.

Ответ 3

Я изложил суть идеального метода для управления заменой фрагмента и жизненным циклом.

Он заменяет текущий фрагмент на новый, только если он не тот же самый и если его нет в backstack (в этом случае он выталкивает его).

Он содержит несколько опций, как будто вы хотите, чтобы фрагмент был сохранен в backstack.

=> Смотрите суть здесь

Используя это и отдельное действие, вы можете захотеть добавить это в свое действие:

@Override
public void onBackPressed() {
int fragments = getSupportFragmentManager().getBackStackEntryCount();
if (fragments == 1) {
finish();
return;
}

super.onBackPressed();
}
Ответ 4

Используйте приведенный ниже код в Android.support.v4

FragmentTransaction ft1 = getFragmentManager().beginTransaction();
WebViewFragment w1 = new WebViewFragment();
w1.init(linkData.getLink());
ft1.addToBackStack(linkData.getName());
ft1.replace(R.id.listFragment, w1);
ft1.commit();
java android android-fragments