2013-03-25 4 views
4

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

Как утверждает Android-разработчиков,

Отрывок представляет собой поведение или часть пользовательского интерфейса в качестве активность. Вы можете объединить несколько фрагментов в одном действии с , создать многоуровневый пользовательский интерфейс и повторно использовать фрагмент в нескольких действиях. Вы можете считать фрагмент как модульный раздел активности, который имеет свой собственный жизненный цикл, получает свои собственные входные события и которые вы можете добавить или удалить во время выполнения активности (вроде как «вспомогательная» «что вы можете повторно использовать в разных действиях).

А также:

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

И мое использование фрагментов идет следующее путь: У меня есть только одна основная деятельность и целая куча фрагментов. Вместо запуска я предпочитаю заменять фрагменты. Например, у меня есть FeedsFragment, FriendsFragment, MessagesFragment, и когда я выбираю что-то из скользящего меню, мой Activity просто заменяет основной Fragment. Если я запустил фрагмент из другого фрагмента, я поставил предыдущий в backstack.

Некоторые фрагменты требуют активность, чтобы изменить ActionBar, двутавровой сделать это непосредственно

((MainActivity)getActivity()).setupActionBar(); 

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

Итак, это правильный способ сделать что-то? Или я совсем чего-то не хватает?

+0

вы можете Acces ActionBar внутри фрагмента, например: 'ActionBar аб = getActivity() getActionBar()' имеет смысл держать внутри кода фрагмента, который изменяет ActionBar для этого частности. фрагмент. Кроме того, если вы хотите получить доступ к родительской активности изнутри фрагмента, вам следует следовать рекомендациям Google и использовать для этого интерфейс. здесь объясняется довольно неплохо: http://developer.android.com/training/basics/fragments/communicating.html – pelotasplus

ответ

0

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

Но жизненный цикл фрагментов зависит от жизненного цикла деятельности. Поэтому, когда действие разрушено, фрагменты также разрушаются.

// 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 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null);  
// Commit the transaction 
transaction.commit(); 

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

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

Но вы должны подумать, вам действительно нужно использовать их в одной деятельности? Если вам не нужно показывать их в одном действии, вам не нужно использовать фрагмент.

Фрагмент всегда должен быть встроен в деятельности и жизненный цикл фрагмента напрямую зависит от жизненного цикла хозяина активность в.Например, если операция приостановлена, то есть все фрагменты в ней и , когда действие уничтожено, так же как и все фрагменты. Однако в то время как выполняется действие (оно находится в состоянии возобновленного жизненного цикла), вы можете самостоятельно обрабатывать каждый фрагмент, например добавлять или удалять их. Когда вы выполняете такую ​​транзакцию с фрагментами, вы также можете добавить ее в задний стек , который управляется активностью. Каждая запись заднего стека в операции является записью произошедшей транзакции фрагмента. Задний стек позволяет пользователю отменить транзакцию фрагмента (перейдите назад), нажав кнопку «Назад».

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

enter image description here

+0

Я использую SlidingMenu, и когда я выбираю элемент из SlidingMenu, я не хочу, чтобы новая активность всплывала out, я хочу, чтобы меню закрывалось, а новый контент отображался вместо старого. Это выглядит более естественным. – agamov

+0

Итак, это правильный способ использовать фрагмент в вашем screnario. – Talha

Смежные вопросы