Android中的popBackStack和addToBackStack
我对android非常陌生,尝试将我的iphone应用程序转换为android。我试着在片段之间切换,在从片段A导航到B之后,我想用后退按钮从片段B返回到A。我做了一项研究,但不能很好地理解它。在下面的代码中,我有一个导航抽屉,可以在片段之间导航。单击追随者后,我想用后退按钮返回新闻提要Android中的popBackStack和addToBackStack,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,我对android非常陌生,尝试将我的iphone应用程序转换为android。我试着在片段之间切换,在从片段A导航到B之后,我想用后退按钮从片段B返回到A。我做了一项研究,但不能很好地理解它。在下面的代码中,我有一个导航抽屉,可以在片段之间导航。单击追随者后,我想用后退按钮返回新闻提要 //this is the navigation drawer part if (id == R.id.my_archive_drawer) { myArchiveF
//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
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并单击back按钮时,您已经删除了followers片段。所以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();
}
}
有关这两种方法的更多信息,您可以阅读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并单击back按钮时,您已经删除了followers片段。所以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();
}
}
有关这两种方法的更多信息,您可以阅读非常感谢JpCrow,它起了作用:)如果我在“on create”部分中创建的新闻片段(起始片段)中要禁用后退按钮,该怎么办?在这种情况下,您应该覆盖onBackPressed()而不调用super.onBackPressed();只有在这种情况下,你才应该添加一个标志或其他东西。如果我在“on create”部分中创建的新闻片段(起始片段)中,如果我想禁用后退按钮,那该怎么办?在这种情况下,你应该覆盖onBackPressed()而不是调用super.onBackPressed();只有在这种情况下,您才应该添加标志或其他内容