handle back button in single fragment

别说谁变了你拦得住时间么 提交于 2019-12-07 05:38:50

问题


I have an application with navigation drawer. when i start the application, what i have on main screen (screen A) is "hello world" and then when i select an item from navigation drawer, i load a fragment and get "new hello world" and then again when i select an item from navigation drawer, i load a fragment and get "hello universe". But since this is all happening via 1 single fragment, when i press the device back button i should get previous fragment like below:

"hello universe" >press back> "new hello world" >press back> "hello world"

how do i handle this ?

NOTE:

while changing the fragment i have tried

fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();

then i changed to :

fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();

but nothing worked. The app exits on back button press. Is it due to the same fragment getting replaced by another content again and again?


回答1:


The second approach you tried is correct.Try to call popBackStack() on BackPressed() by overriding onBackPressed() method.

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



回答2:


I think you need to add the fragment to the backstack by calling addToBackStack, something like this:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.findFragmentByTag("MainFragment") == null) {
    fragmentTransaction.add(R.id.content_frame, fragment, "MainFragment");
} else {
    fragmentTransaction.replace(R.id.content_frame, fragment, "MainFragment");
    fragmentTransaction.addToBackStack("Fragment" + position);
}
fragmentTransaction.commit();

and the override OnBackPressed():

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



回答3:


use methods addToBackStack and popBackStack in order to handle back button for fragments here is sample

    ft.replace(R.id.simple_fragment, newFragment);
    ft.addToBackStack("tag");
    ft.commit();

and on back button

FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
    fm.popBackStack();
}


来源:https://stackoverflow.com/questions/30181746/handle-back-button-in-single-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!