0

在一个活动中,有一个包含对象列表的片段。此片段应替换为另一个包含列表项详细信息的片段。当细节片段处于活动状态并按下后退按钮时,应该恢复列表片段。

我的代码:

@Override
    public void onBackPressed() {
            if (detailsFragment.isVisible())
            {
                goToListFragment();
            }
        }
    }

    public void goToListFragment() {
        String backStateName = listFragment.getClass().getName();

        FragmentManager fm = getSupportFragmentManager();
        boolean fragmentPopped = fm.popBackStackImmediate(backStateName, 0);

        if (!fragmentPopped){ //fragment not in back stack, create it.
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.main_fragment_container, listFragment);
            ft.addToBackStack(backStateName);
            ft.commit();
        }


    }

    public void goToDetailsFragment(String foodAsJSON) {    
        String backStateName = detailsFragment.getClass().getName();
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.main_fragment_container, detailsFragment)
                .addToBackStack(backStateName)
                .commit();
    }

我观察到:

listfragment: onPause() 
<back pressed in details view>
listfragment: oncreateView()
listfragment: onResume()

因此,当按下后退按钮时,我希望只调用onResume函数。实际上,它是如何在片段生命周期中描述的。但正如我所观察到的,oncreateView()也被调用了。这会导致片段完全重新加载,这不是想要的行为。那么,如何正确恢复主片段?

4

0 回答 0