Android 中的 popBackStack 和 addToBackStack
popBackStack and addToBackStack in Android
我是 android 的新手,尝试将我的 iphone 应用程序转换为 android。我尝试在片段之间导航,在从片段 A 导航到 B 之后,我想使用后退按钮从片段 B 返回到 A。我做了一个研究,但不能很好地理解它。在代码下方,我有一个导航抽屉,我可以在其中在片段之间导航。单击关注者后,我想使用后退按钮返回新闻提要。
//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的意思是把fragment放入栈中。这意味着当您将片段新闻推送给片段关注者时,您正在将片段添加到堆栈中。因此,当您返回时 return 到新闻片段。
试试这个代码:
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
我是 android 的新手,尝试将我的 iphone 应用程序转换为 android。我尝试在片段之间导航,在从片段 A 导航到 B 之后,我想使用后退按钮从片段 B 返回到 A。我做了一个研究,但不能很好地理解它。在代码下方,我有一个导航抽屉,我可以在其中在片段之间导航。单击关注者后,我想使用后退按钮返回新闻提要。
//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的意思是把fragment放入栈中。这意味着当您将片段新闻推送给片段关注者时,您正在将片段添加到堆栈中。因此,当您返回时 return 到新闻片段。
试试这个代码:
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