2016-03-19 5 views
0

Я очень новичок в android и пытаюсь преобразовать приложение iphone в android. Я пытаюсь перемещаться между фрагментами, и после перехода от фрагмента A к B, я хочу вернуться от фрагмента B к A с помощью кнопки «Назад». Я сделал исследование, но не мог понять его хорошо. Ниже в коде есть ящик навигации, в котором я перемещаюсь между фрагментами. После щелчка последователей я хочу вернуться к ленте новостей с помощью кнопки «Назад».popBackStack и addToBackStack в Android

//this is the navigation drawer part  
if (id == R.id.my_archive_drawer) { 

       myArchiveFragment fragment = new myArchiveFragment(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack("newsFeedFragment"); 
       fragmentTransaction.commit(); 

      } else if (id == R.id.followers_drawer) { 

       followedFollowersFragment fragment = new followedFollowersFragment(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack("newsFeedFragment"); 
       fragmentTransaction.commit(); 

      } 
//this is the navigation drawer part 



//this is the on create part part 
     newsFeedFragment fragment = new newsFeedFragment(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 
//this is the on create part part 


//onbackpreseed part 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      getFragmentManager().popBackStack("newsFeedFragment"); 
     } 
    } 
//onbackpressed part 

ответ

1

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

Попробуйте этот код:

followedFollowersFragment fragment = new followedFollowersFragment(); 
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

, а затем в вашем onBackPressed() удалить popbackstack(), потому что при вызове onBackPressed нажав на кнопку назад вы уже извлекая фрагмент последователей. Таким образом, onBackPressed() должен быть таким:

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Для получения дополнительной информации об этом 2 методы, которые вы можете прочитать here

+0

Большое спасибо JpCrow, он работал :), что если я хочу, чтобы отключить кнопку назад когда я нахожусь в фрагменте news_freed, который был создан в части «on create», исходный фрагмент? – saner

+0

В этом случае вы должны переопределить onBackPressed() и не вызывать super.onBackPressed(); только когда это так, вы должны добавить флаг или что-то еще – JpCrow

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

  • Нет связанных вопросов^_^