2016-03-16 4 views
0

Я новичок в разработке Android, пожалуйста, несите меня. У меня есть три фрагмента - Frag1, Frag2 и Frag3. Frag1 - это своего рода ListView со списком элементов, который создается при запуске приложения. Frag2 и Frag3 в основном соответствуют VideoViews, которые будут использоваться для воспроизведения разных видеороликов разных игроков. Один из них будет воспроизводить контент Video, а другой будет воспроизводить видео для рекламы.Переключение между различными фрагментами в Android

Когда я нажимаю на определенный элемент в Frag1, я хочу создать Frag2 и Frag3. Я хочу иметь оба фрагмента, так как мне, возможно, придется играть в Ad в любое время. Я скрою фрагмент содержимого, когда будет играть Ad и наоборот. Также я хочу, чтобы при нажатии кнопки «Назад» я должен вернуться к Frag1 (listView), независимо от того, была ли Frag2 или Frag3 видна при нажатии кнопки «Назад».

То, что я не могу четко понять, состоит в том, как складывать фрагменты, чтобы всякий раз, когда я нажимаю кнопку «Назад» во время воспроизведения объявления или видео, он переходит в списокView. Потому что, если я правильно понимаю, фрагменты складываются в том порядке, в котором они добавлены. Поэтому, если я добавлю в Frag1, а затем Frag2 и Frag3, то нажатие назад, когда Frag3 находится сверху, перейдет к Frag2, а не к Frag1. Также скажите, отображается ли в настоящее время Frag2, и я нажимаю назад, тогда я думаю, что Frag3 все равно останется, хотя я хочу, чтобы Frag2 и Frag3 могли появляться, когда я нажимаю кнопку «Назад».

Пожалуйста, помогите мне в этом. Любые ссылки, которые правильно объясняют используемые здесь понятия, также будут оценены.

+0

Вы можете использовать FragmentManager.popBackStack (имя String, FragmentManager.POP_BACK_STACK_INCLUSIVE) совать все фрагменты из backstack до названных один. – ElDuderino

+0

Если вы не используете frag2 и frag3 toggether, вы можете показать добавление vedio и содержимого vedio на том же самом представлении. – sachithkn

+0

Прочитать http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack –

ответ

0

Фрагменты только добавляются в стек, если вы вызываете addToBackStack() во время выполнения Фрагментной транзакции.

Метод 1

Так при открытии Frag2 из Frag1 следует назвать потому, что вы хотите, чтобы ваш Frag1 быть там, когда вы нажимаете назад.

Принимая во внимание, что при открытии Frag3 из Frag2 или наоборот, не вызывайте addToBackStack(). Если после этого вы нажмете кнопку назад с Frag3 или Frag2, вы сразу перейдете к Frag1, так как ваш задний стек будет иметь только Frag1.

Метод 2

Другой способ переопределить метод onBackPressed() в деятельности. При этом каждый раз, когда нажимается кнопка назад, вы можете откатить назад стек с помощью

Fragment f = getFragmentManager.popBackStackImmediate 

А затем проверить, какой фрагмент является то, что по -

if(f instanceof Frag2 || f instanceof Frag3){ 
    //pop it 
} 

Теперь проверьте снова. Следите за тем, чтобы остался только Frag1.

0

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

public void onBackPressed(){ 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    fm.popBackStack(); 
} 
0

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

@Override 
     public void onBackPressed() { 

     Highlights_fragment test1 = (Highlights_fragment)getFragmentManager().findFragmentByTag("1"); 
     Aktulless_Fragment test2 = (Aktulless_Fragment)getFragmentManager().findFragmentByTag("2"); 

     if (test1 != null && test1.isVisible()) { 
      //DO STUFF 
      getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.frame_container)).commit(); 

     } 
     else if(test2 != null && test2.isVisible()){ 
      //Whatever 
      getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.frame_container)).commit(); 

     } 
     else 
     { 
      super.onBackPressed(); 
     } 

и Frag2 и Frag3 вам нужно заменить конкретный фрагмент на конкретном элементе нажатый.

Надеется, что это помогает :)

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