Search code examples
android-fragmentsxamarin.androidonbackpressed

Using device back pressed in fragment Xamarin Android?


I have an activity, and three fragments are called from it. Now, I want to use Back Press method to come back to the previous fragment or screen in Xamarin.Android? How, can I achieve this??


Solution

  • This will do the job:

    using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Net;
    
        using Android.App;
        using Android.Content;
        using Android.OS;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using SupportTolbar = Android.Support.V7.Widget.Toolbar;
        using Android.Support.V7.App;
        using Android.Support.V4.Widget;
        using Android.Graphics;
        using SupportFragment = Android.Support.V4.App.Fragment;
        using Android.Content.PM;
        using Android.Graphics.Drawables;
        using System.Threading.Tasks;
        using System.Net.Http;
        using Newtonsoft.Json;
    
        namespace App
        {
            [Activity(Label = "", Theme = "@style/MyTheme", ScreenOrientation = ScreenOrientation.Portrait)]
            public class HomeActivity : AppCompatActivity
            {
    
                //Views that switch the fragments 
                public ImageView _viewTab1;
                public ImageView _viewTab2;
                public ImageView _viewTab3;
    
                //fragmentContainer 
                 private FrameLayout _frameLayoutFragmentContainer;
                //fragments 
                public SupportFragment _currentFragment;
                public SupportFragment _customFragment1;
                public SupportFragment _customFragment2;
                public SupportFragment _customFragment3;
    
                private Stack<SupportFragment> _StackFragment;
    
    
    
                protected async override void OnCreate(Bundle savedInstanceState)
                {
                    base.OnCreate(savedInstanceState);
                    SetContentView(Resource.Layout.Main);
    
                     _frameLayoutFragmentContainer = FindViewById<FrameLayout>(Resource.Id.frameContainer);
    
                    //initialize views that switch fragments
                    _viewTab1 = FindViewById<ImageView>(Resource.Id.viewTab1);
                    _viewTab2 = FindViewById<ImageView>(Resource.Id.viewTab2);
                    _viewTab3 = FindViewById<ImageView>(Resource.Id.viewTab3);
    
                    //catch events on button click what ever is the thing that switches the fragments
                    _viewTab1.SetOnClickListener(new TabOnClickListener(this));
                    _viewTab2.SetOnClickListener(new TabOnClickListener(this));
                    _viewTab3.SetOnClickListener(new TabOnClickListener(this));
    
                   //create fragments
                    _customFragment1 = new Fragment1();
                    _customFragment3 = new Fragment2();
                    _customFragment2 = new Fragment3();
                    _currentFragment = _customFragment1;
                    _StackFragment = new Stack<SupportFragment>();
    
                    var trans = SupportFragmentManager.BeginTransaction();
                    trans.Add(Resource.Id.frameContainer, _customFragment1, "First Fragment");
                    trans.Commit();
    
                }
    
                public override void OnBackPressed()
                {
    
                    base.OnBackPressed();
                }
    
                public void ReplaceFragment(SupportFragment fragment) {
                    if (fragment.IsVisible)
                        return;
                    var trans = SupportFragmentManager.BeginTransaction();
                    trans.Replace(Resource.Id.frameContainer, fragment);
                    trans.AddToBackStack(null);
                    trans.Commit();
    
                    _currentFragment = fragment;
    
            }
    
            }
    
            public class TabOnClickListener : Java.Lang.Object, View.IOnClickListener
            {
                private HomeActivity homeActivity;
    
                public TabOnClickListener(HomeActivity homeActivity)
                {
                    this.homeActivity = homeActivity;
                }
    
                public void OnClick(View v)
                {
    
                    switch (v.Id)
                    {
                        case Resource.Id.viewTab1:
                            homeActivity.ReplaceFragment(homeActivity._customFragment1);
                            break;
                    case Resource.Id.viewTab2:
                            homeActivity.ReplaceFragment(homeActivity._customFragment2);
                            break;
                    case Resource.Id.viewTab3:
                            homeActivity.ReplaceFragment(homeActivity._customFragment3);
                            break;
    
                    }
                }
            }
        }