有关fragment嵌套的问题,如何在fragment之间切换?

安卓小白最近在尝试使用Xamarin来进行安卓开发,手边有一个扫描二维码的demo,其中涉及到了fragment之间的切换与传值,有些地方不是很明白,请大神答疑解惑。

图片说明

如图所示除activity外每一个方框都代表一个fragment,下一级嵌套在上一级里边,嵌套的容器标注在旁边。目前,已经可以实现scanner接收zxing扫描来的数据,然后切换到show来显示。
目前的疑问是scanner是通过以下代码来获取返回值的,我不是很明白,有大神可以给我讲讲原理吗?另外还有一点疑惑的是可以从show返回zhi到上上级吗?或者回到activity?

  public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            base.OnViewCreated(view, savedInstanceState);

             zxingOverlay = LayoutInflater.FromContext(this.Activity).Inflate(Resource.Layout.ZxingOverlay, null);

             scanFragment = new ZXingScannerFragment(ScanResultCallback);
             scanFragment.UseCustomView = true;
             scanFragment.CustomOverlayView = zxingOverlay;

             this.Activity.SupportFragmentManager.BeginTransaction()
                 .Replace(Resource.Id.fragment_container, scanFragment)
                 .Commit();




        }



 private void ScanResultCallback(ZXing.Result result)
        {
            if (result == null || string.IsNullOrEmpty(result.Text))
            {
                this.Activity.RunOnUiThread(() =>
                {
                    Toast.MakeText(this.Activity, "扫描已取消!", ToastLength.Short).Show();
                    ((HomeFragment)this.FragmentManager.Fragments[0]).SetCurrentTab("Main");
                });
                return;
            }
            else
            {
                //扫描成功  偶尔扫描结果会是一串数字???
                this.Activity.RunOnUiThread(() =>
                {
                    //震动
                    Vibrator vibrator = (Vibrator)Application.Context.GetSystemService(Context.VibratorService);
                    long[] pattern = { 0, 350, 220, 350 };
                    vibrator.Vibrate(pattern, -1);

                    Console.WriteLine(result.Text);
                    //此处加上二维码的格式要求,如果不符合要求,就继续扫描(我这里是判断是否是手机号码)
                    if (IsTelephone(result.Text))
                    {
                        //主动关闭摄像头,防止重复扫描
                        scanFragment.Shutdown();
                        Toast.MakeText(this.Activity, result.Text , ToastLength.Short).Show();

                    }
                    else
                    {
                        Toast.MakeText(this.Activity, "扫描的二维码格式不正确!", ToastLength.Short).Show();
                        ((HomeFragment)this.FragmentManager.Fragments[0]).SetCurrentTab("Main");
                    }
                });
                HandleScanresult(result);
                return;
            }
        }

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问