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

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

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(); 

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

Xml fragmentа детали книги имеет id book_description_fragment и xml для fragmentа описания раздела имеет id section_description_fragment.

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

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

Примечание. R.id.fragment_container – это макет или контейнер по вашему выбору в действии, к которому вы приносите fragment.

 // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().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(); 

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

Вы можете заменить только « динамически добавленный fragment ».

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

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

Он заменяет только текущий fragment на новый, если он не то же самое, и если он не находится в состоянии backstack (в этом случае он будет всплывать).

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

=> См. Здесь Gist

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

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

Используйте приведенный ниже код в 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(); 

Используйте этот код, используя v4

  ExampleFragment 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 so the user can navigate back transaction.replace(R.id.container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

надеюсь, что вы преуспеваете. Когда я начал работать с Android Fragments меня также была такая же проблема, после чего я прочитал примерно 1 – Как переключить fragment с другим. 2- Как добавить fragment, если в Fragment container нет fragmentа.

то после некоторых НИОКР я создал функцию, которая помогает мне во многих проектах до сих пор, и я все еще использую эту простую функцию.

 public void switchFragment(BaseFragment baseFragment) { try { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); if (getSupportFragmentManager().findFragmentById(R.id.home_frame) == null) { ft.add(R.id.home_frame, baseFragment); } else { ft.replace(R.id.home_frame, baseFragment); } ft.addToBackStack(null); ft.commit(); } catch (Exception e) { e.printStackTrace(); } } 

наслаждайтесь кодовым временем 🙂

Используйте ViewPager. Это работа для меня.

 final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.vp_pager); button = (Button)result.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(1); } }); 
  • Расширения OpenGL, доступные на разных устройствах Android
  • ПРЕДУПРЕЖДЕНИЕ: невозможно изменить разрешения для всех:
  • Правильный способ добавления внешних банок (lib / *. Jar) в проект IntelliJ IDEA
  • Как передать URI на намерение?
  • Проверка, является ли строка пустой или пустой в Java
  • Драйвер не смог установить безопасное соединение с SQL Server с использованием шифрования Secure Sockets Layer (SSL)
  • тип возврата main в java
  • Разница между статическими и финальными?
  • Android FragmentManager BackStackRecord.run бросает NullPointerException
  • Сетевой прослушиватель Android
  • Можем ли мы подключить удаленную базу данных MySQL на Android с помощью JDBC?
  • Давайте будем гением компьютера.