1

当我按下“返回”按钮(在模拟器和 Galaxy S2 上测试)时,应用程序关闭,无论提交了多少片段事务:(

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

@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。如果您需要更多信息,请在评论中告诉我。

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

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

4

1 回答 1

0

改变这个:

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

对此:

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

我是来自以色列的 OMRI,如果您有更多问题,请联系我 omlrc1991@gmail.com

于 2015-03-25T18:00:54.977 回答