Onbackpressed重定向到特定片段

时间:2017-03-16 04:19:02

标签: android android-fragments navigation-drawer onbackpressed

在我的应用程序中我有导航抽屉,所以我有一个MainActivity,其余的是片段。我的应用程序工作正常。每当我按下后退按钮它重定向到上一个fragment.it工作正常。但我想要的是成功付款后我显示成功的付款页面,在此页面上当用户按下后退按钮我想重定向到HomeFragment,但现在它去了到Placeorder片段。

@Override
    public void onBackPressed() {
        if(getFragmentManager().getBackStackEntryCount() == 0) {
            super.onBackPressed();
        }
        else {
            getFragmentManager().popBackStack();
        }
    }

7 个答案:

答案 0 :(得分:0)

你应该在抽象类片段

中模拟如下的函数
<li><a href="Very_long_text_in_this_line">'Very long text<br /> in this line'</a>  
    </li>

在MainActivity中,您将处理此功能

    /**
     * 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()

答案 1 :(得分:0)

使用:

fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.commit();

不要这样做:

fragmentTransaction.addToBackStack(null);

答案 2 :(得分:0)

一种方法是在打开新片段时保存先前的片段(previousFragment)变量,并在第一个或占位符片段时将其设为null ....然后检查previousFragmentonBackPressed的值1}}方法,如果为null,则执行退出操作,否则将片段替换为previousFragment,您将通过该片段返回上一个片段。

答案 3 :(得分:0)

你在onBackPressed()里面的

是这样的:

@Override
    public void onBackPressed() {
        if(getSupportFragmentManger.findFragmentByTag("paymentFragment") != null){
          //add homeFragment;
        }  
        else{
            if(getFragmentManager().getBackStackEntryCount() == 0) {
                super.onBackPressed();
            }
            else {
                getFragmentManager().popBackStack();
            }
        }
    }

答案 4 :(得分:0)

覆盖您的public class ComponentService implements FieldGroupFieldFactory { /** * Create Distributor ComboBox */ public ComboBox createComboBoxDistributor(String caption, boolean required) { ComboBox c = new ComboBox(caption); BeanItemContainer<Distributor> beans = new BeanItemContainer<Distributor>(Distributor.class); beans.addAll(distributorService.find(null)); c.setContainerDataSource(beans); c.setFilteringMode(FilteringMode.CONTAINS); c.setRequired(required); return c; } } ComboBox comboDistributor = componentService.createComboBoxDistributor("Disributor", false); comboDistributor.setValue(this.entity.getCustomer().getDistributor()); 方法:

onBackPress

答案 5 :(得分:0)

你可以在Application类中设置一些全局变量(当付款成功时为true,否则为false),并且在你的活动的onbackpressed中只检查变量是否为真。然后在你的活动的反向调用这个函数。

  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);
        }
    }

答案 6 :(得分:0)

遵循这个简单的方法 将整数声明为

 public int count;

在主页

中将此计数初始化为count=0

现在将其包含在您的主要活动中

  @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);
    }
}