2017-02-14 3 views
1

Я изучал решение моей проблемы, но ни один результат не устраняет мою проблему.Переключение деятельности

У меня есть пять действий Java. Каждое действие имеет пять кнопок, четыре для других действий и один для себя. В основе всего этого лежит нижняя часть нижней части страницы.

Моя проблема заключается в том, что, скажем, я нахожусь в одном действии, а затем снова нажимаю эту кнопку для этой операции, она открывается и загружает совершенно новую активность. И затем, когда я нажимаю «назад», он показывает предыдущую активность, когда я ее оставил. Но если я нажимаю его десять раз, мне нужно щелкнуть десять раз. Кроме того, если я переключаюсь между каждым действием дважды, и я хочу вернуться к основному, чтобы выйти, мне нужно щелкнуть десять раз вместо пяти.

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

+0

'... и один для себя' Так в чем смысл наличия кнопки, которая открывается ... very same Активность Вы уже в делах ?! –

+0

@ Rotwang это постоянный ui. Подумайте, instagram. Я мог бы очень просто отключить кнопку, когда она находится на этой странице, но она по-прежнему не устраняет проблему. Если я открою другую страницу, а затем снова открою эту страницу, скажу, что я просто переключаюсь между страницами, перемещая кнопки, и я делаю это 100 раз, тогда мне нужно будет щелкнуть 100 раз. Я хочу что-то, где мне нужно всего лишь 5 раз в любой момент. –

+0

@ Rotwang и я все еще хочу сохранить эту кнопку для будущего использования, чтобы я мог перепрофилировать ее, чтобы обновить эту активность, когда она открыта. –

ответ

2

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

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if(id == R.id.nav_home){ 

     Fragment newFragment; 
     FragmentManager fragmentManager = getSupportFragmentManager(); 

     // Look for fragment by tag 
     Fragment foundFragment = fragmentManager.findFragmentByTag(MAIN_FRAGMENT); 

     if(foundFragment != null) { //if fragment's already in the backstack 
      newFragment = foundFragment; //replace fragment with backstack fragment 
     }else{ 
      newFragment = new MainFragment(); // use a new fragment instance 
     } 

     // Add new fragment instance to fragment manager 
     fragmentManager.beginTransaction() 
       .replace(R.id.fragment_container, newFragment, MAIN_FRAGMENT) 
       .addToBackStack(MAIN_FRAGMENT) 
       .commit(); 

    } 
    // ... 
} 
+0

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

+2

манифест не заботится о фрагментах, поэтому вы можете прокомментировать объявления активности в манифесте для тех, которые вы хотите изменить на фрагменты. Основное действие будет содержать ваше навигационное меню и контейнер «FrameLayout»/фрагмент. Для изменения «Деятельности» на «Фрагменты» существует несколько отличий в методах жизненного цикла, но в большинстве случаев существует много сходства, поэтому вы можете обычно скопировать свой код и внести некоторые корректировки для использования версий методов «Фрагмент» вы имели в своей деятельности или 'getActivity().' whateverYouWantToUse(), чтобы использовать версию активности. –

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