简体   繁体   English

片段反向导航

[英]Fragment back navigation

I have an AppCompatActivity with 我有一个AppCompatActivity

        Android.Support.V7.Widget.Toolbar myToolbar = (Android.Support.V7.Widget.Toolbar)FindViewById(Resource.Id.my_toolbar);
        SetSupportActionBar(myToolbar);
        SupportActionBar.SetDisplayHomeAsUpEnabled(true);

I use fragments in this activity to change what is displayed under the toolbar. 我在此活动中使用片段来更改工具栏下显示的内容。 I want each fragment (on SupportFragmentManager.BeginTransaction().Replace(Resource.Id.content, myFragment).Commit() ) to be pushed on a stack so on toolbar back button touch or android back button press previous fragment is popped and displayed. 我希望将每个片段(在SupportFragmentManager.BeginTransaction().Replace(Resource.Id.content, myFragment).Commit() )推入堆栈,以便在工具栏上的后退按钮触摸或android后退按钮按下时弹出并显示。 How to do that? 怎么做?

I solved that by overriding OnOptionsItemSelected in my activity: 我通过在活动中重写OnOptionsItemSelected解决了这一问题:

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        if (SupportFragmentManager.BackStackEntryCount == 0)
        {
            return base.OnOptionsItemSelected(item);
        }

        SupportFragmentManager.PopBackStack();
        return true;
    }

Note: No need to override OnBackPressed. 注意:无需覆盖OnBackPressed。

use this : 用这个 :

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(containerId, fragment, fragment.getClass().getSimpleName());
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

@Override
public void onBackPressed() { //or use on menu item clicked
    FragmentManager fragmentManager = getSupportFragmentManager();
    if (fragmentManager.getBackStackEntryCount() > 0) {
        fragmentManager.popBackStack();
    }else {
        super.onBackPressed();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM