Onbackpressed 重定向到特定片段
Onbackpressed redirect to particular fragment
在我的应用程序中,我有导航抽屉,所以我有一个 MainActivity,其余的是片段。我的应用程序运行良好。每当我按下后退按钮时,它都会重定向到之前的 fragment.it 工作 fine.but 我想要的是在成功付款后我显示成功付款页面,当用户按下后退按钮时我想重定向到 HomeFragment,但是现在它转到 Placeorder 片段。
@Override
public void onBackPressed() {
if(getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
else {
getFragmentManager().popBackStack();
}
}
你应该在抽象class片段
中模拟如下功能
/**
* Handle "Back" key pressed.
* @return TRUE if the "Back" key pressed was handled. FALSE indicate it's not handled and parent class can handle it.
*/
public abstract boolean onBackPressed()
而在 MainActivity 中,您将处理此函数
@Override
public void onBackPressed() {
if (mSelectedFragment != null && mSelectedFragment.onBackPressed()) {
return;
} else {
super.onBackPressed
}
}
使用:
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.commit();
不要这样做:
fragmentTransaction.addToBackStack(null);
一种方法是在打开新片段时保存前一个片段 (previousFragment
) 变量,并在您位于第一个片段或占位符片段中时将其设为 null ....然后检查 previousFragment
内部的值onBackPressed
方法,如果为 null 则执行退出操作,否则用 previousFragment
替换片段,这样您将在返回时返回到上一个片段。
在你的 onBackPressed()
中这样做:
@Override
public void onBackPressed() {
if(getSupportFragmentManger.findFragmentByTag("paymentFragment") != null){
//add homeFragment;
}
else{
if(getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
else {
getFragmentManager().popBackStack();
}
}
}
覆盖您的 onBackPress
方法:
@Override
public void onBackPressed() {
if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){
fragment.getChildFragmentManager().popBackStack();
}else {
super.onBackPressed();
}
}
您可以在应用程序 class 中设置一些全局变量(付款成功时为真,否则为假),并在 activity 的 onbackpressed 中检查变量为真或 not.Then您的 activity 调用此函数后退。
public void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
按照这个简单的方法
声明一个整数为
public int count;
在您的主页中将此计数初始化为 count=0
现在将其包含在您的主要内容中 activity
@Override
public void onBackPressed() {
if (count == 1) {
if (exit) {
super.onBackPressed();
return;
} else {
Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 2000);
}
}else {
toolbar.setTitle("Home");
mDrawerLayout.closeDrawers();
count=1;
display(0);
}
}
在我的应用程序中,我有导航抽屉,所以我有一个 MainActivity,其余的是片段。我的应用程序运行良好。每当我按下后退按钮时,它都会重定向到之前的 fragment.it 工作 fine.but 我想要的是在成功付款后我显示成功付款页面,当用户按下后退按钮时我想重定向到 HomeFragment,但是现在它转到 Placeorder 片段。
@Override
public void onBackPressed() {
if(getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
else {
getFragmentManager().popBackStack();
}
}
你应该在抽象class片段
中模拟如下功能 /**
* Handle "Back" key pressed.
* @return TRUE if the "Back" key pressed was handled. FALSE indicate it's not handled and parent class can handle it.
*/
public abstract boolean onBackPressed()
而在 MainActivity 中,您将处理此函数
@Override
public void onBackPressed() {
if (mSelectedFragment != null && mSelectedFragment.onBackPressed()) {
return;
} else {
super.onBackPressed
}
}
使用:
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.commit();
不要这样做:
fragmentTransaction.addToBackStack(null);
一种方法是在打开新片段时保存前一个片段 (previousFragment
) 变量,并在您位于第一个片段或占位符片段中时将其设为 null ....然后检查 previousFragment
内部的值onBackPressed
方法,如果为 null 则执行退出操作,否则用 previousFragment
替换片段,这样您将在返回时返回到上一个片段。
在你的 onBackPressed()
中这样做:
@Override
public void onBackPressed() {
if(getSupportFragmentManger.findFragmentByTag("paymentFragment") != null){
//add homeFragment;
}
else{
if(getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
else {
getFragmentManager().popBackStack();
}
}
}
覆盖您的 onBackPress
方法:
@Override
public void onBackPressed() {
if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){
fragment.getChildFragmentManager().popBackStack();
}else {
super.onBackPressed();
}
}
您可以在应用程序 class 中设置一些全局变量(付款成功时为真,否则为假),并在 activity 的 onbackpressed 中检查变量为真或 not.Then您的 activity 调用此函数后退。
public void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
按照这个简单的方法 声明一个整数为
public int count;
在您的主页中将此计数初始化为 count=0
现在将其包含在您的主要内容中 activity
@Override
public void onBackPressed() {
if (count == 1) {
if (exit) {
super.onBackPressed();
return;
} else {
Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 2000);
}
}else {
toolbar.setTitle("Home");
mDrawerLayout.closeDrawers();
count=1;
display(0);
}
}