Как загрузить новый фрагмент в том же пространстве, что и текущий фрагмент - PullRequest
6 голосов
/ 17 октября 2011

Я ищу несколько советов о том, как лучше всего обрабатывать фрагменты, запускающие другие фрагменты.

Я конвертирую приложение, которое я начал писать, используя более активный подход, основанный на действиях, и с тех пор начал его перемещать.перейти к использованию фрагментов.У меня есть несколько фрагментов, которые использовались для запуска нового действия, и я хочу переместить их для запуска других фрагментов в том же представлении, в котором находится текущий фрагмент.

Например - у меня есть действие, которое имеет WebViewкоторый использует WebViewClient для обработки внутренних js-> java-взаимодействий.Мой WebViewClient может запускать другие действия, которые я использовал для:

 i = new Intent(context, GoogleMapActivity.class);
 startActivity(i);

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

Итак ... есть ли способ,в пределах фрагмента, по сути говоря, чтобы новый фрагмент загружался в то же пространство, что и текущий фрагмент, или необходимо какое-то взаимодействие с действием?

** EDIT **

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

Ответы [ 3 ]

6 голосов
/ 16 апреля 2015
getFragmentManager().beginTransaction()
   .replace(((ViewGroup) getView().getParent()).getId(), fragment)
   .addToBackStack(null)
   .commit();

Это должно заменить родительский контейнер желаемым фрагментом.

0 голосов
/ 24 августа 2015

Если вы хотите добавить Fragment, а не заменить его, используйте:

getFragmentManager().beginTransaction().add(R.id.fragment_container, new Fragment()).commit();
0 голосов
/ 17 октября 2011

Это должно быть выполнено через FragementManager.replace().Посмотрите документацию для фрагмента и особенно более длинный пример в разделе «Макет».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...