7

我希望能够replace FragmentTransaction通过使用来反转 a addToBackStack()

FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();         
Fragment scheduleFragment = new ScheduleFragment();     
fragmentTransaction.replace(R.id.content_container, scheduleFragment, "scheduleFragment");
fragmentTransaction.addToBackStack("scheduleFragment");
fragmentTransaction.commit();

但在那之后,单击后退按钮什么也不做。

从文档中,它应该撤销交易。

我错过了什么?

4

4 回答 4

25

正确的方法是使用onBackPressed()方法在您的应用程序中捕获该返回事件,然后使用popBackStack(). 例如:

public void onBackPressed()
{
    // Catch back action and pops from backstack
    // (if you called previously to addToBackStack() in your transaction)
    if (getSupportFragmentManager().getBackStackEntryCount() > 0){
        getSupportFragmentManager().popBackStack();
    }
    // Default action on back pressed
    else super.onBackPressed();
}

PD:很抱歉延迟回答,但我刚刚看到你的问题。希望能帮助到你!

于 2013-12-18T19:49:38.627 回答
4

TryfragmentTransaction.addToBackStack(null) 参数 foraddToBackStack()是返回状态的可选名称,你不要在replace()方法中使用标签,它只是片段的可选标签。您可以在此处阅读有关此内容的更多信息。

于 2013-08-19T03:21:14.130 回答
2

我已经有一段时间了,但我希望这会对某人有所帮助。

fragmentTransaction.addToBackStack(null)如果您正在扩展将无法正常工作AppCompatActivity。它在Activity. 我找不到原因。

于 2016-04-02T12:47:30.243 回答
0

我实现了自己的Fragment堆栈:

public Fragment addFragmentToStack(Fragment fragment){
    if(MyApplication.fragmentStack.size()>20){
        MyApplication.fragmentStack.remove(0);
    }
    return MyApplication.fragmentStack.push(fragment);
}   

public void onBackPressed() {
        if (MyApplication.fragmentStack.size() > 0) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_container, MyApplication.fragmentStack.pop());
            ft.commit();
        }
        else{
            finish();
        }
}
于 2013-08-19T04:32:11.030 回答