为什么addToBackStack没有填充BackStack?

时间:2013-09-01 19:32:25

标签: java android android-fragments

当我按下“后退”按钮(在模拟器和Galaxy S2上都进行了测试)时,无论提交了多少片段事务,applciation都会关闭:(

好的,为了以防万一,我会发布片段交易的实现,虽然我怀疑它们是问题

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    Fragment fragment;
    switch(tab.getPosition()) {
    case(0):
        fragment = new Fragment1();
        break;
    case(1):
        fragment = new Fragment2();
        break;
    case(2):
        fragment = new Fragment3();
        break;
    default:
        fragment = new Fragment();
        Toast.makeText(getBaseContext(), "Error", Toast.LENGTH_SHORT).show();
        break;
    }
    Bundle args = new Bundle();
    fragment.setArguments(args);
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.okvir, fragment);
    ft.addToBackStack(null);
    ft.commit();
}

public void searchResultsView(List<School> results) {
    setResults(results);
    FragmentResults searchFragment = new FragmentResults();
    Bundle args = new Bundle();
    searchFragment.setArguments(args);
    getFragmentManager().beginTransaction().replace(R.id.okvir, searchFragment).addToBackStack(null).commit();
}

现在我将尝试提供有关应用程序的技术细节,以便您可以找出阻碍它的内容(具有讽刺意味)。 该应用程序有一个Activity,您可以得出结论,利用ActionBar初始化TabHost。 ActionBar.TabHost附加了三个选项卡,分别对应Fragment1,Fragment2,Fragment3。从Fragment2选项卡调用FragmentResults。如果您需要其他信息,请在评论中告诉我们。

感谢您的时间和精力。干杯

P.S。有意思的是,当我调用DialogFragment时,即使没有AddToBackStack(null)方法,按下“返回”按钮也会返回调用它的片段并且不会关闭应用程序...

1 个答案:

答案 0 :(得分:0)

改变这一点:

ft.replace(R.id.okvir, fragment);
ft.addToBackStack(null);
ft.commit();

对此:

ft.replace(R.id.okvir, fragment,"TAGNAME");
ft.addToBackStack("TAGNAME");
ft.commit();

如果你有更多的问题,我是来自以色列的希望,希望能帮助我 omlrc1991@gmail.com