【问题标题】:Navigating between pages在页面之间导航
【发布时间】:2019-05-15 16:45:27
【问题描述】:

我是这个领域的新手,遇到这样的情况,我有两个页面:

MainActivity.axml
SecondActivity.axml

我在 MainActivity 中有一个名为 BtnOther 的按钮,在此按钮中我想导航到 SecondActivity。在 SecondActivity 中,我有按钮 btnBackToExisting1stPage,我想返回 MainActivity。通常它可以工作,但是:

  1. 单击 BtnOther 或 android 后退箭头后,应用程序将在模拟器上最小化,而不是停留在前面。为什么会这样以及如何避免?

  2. 我希望在按 BtnOther 或返回箭头从 SecondActivity 返回到 MainActivity 但打开与以前一样的确切 MainActivity 状态时。例如,如果我在 MainActivity 上有文本编辑字段并在进入 SecondActivity 之前放置一些文本,然后从 SecondActivity 返回时,我希望看到 MainActivity 完全相同的表单状态,而不是像我当前的代码那样创建新的。

我当前的代码:

 public class MainActivity : AppCompatActivity
 {
      protected  override void OnCreate(Bundle savedInstanceState)
      {
          base.OnCreate(savedInstanceState);
          Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
          Xamarin.Essentials.Platform.Init(this, savedInstanceState);
          // Set our view from the "main" layout resource
          SetContentView(Resource.Layout.activity_main);

          var btnOther = FindViewById<Button>(Resource.Id.Other);
          btnOther.Click += BtnOther_Click;
      }

      private void BtnOther_Click(object sender, EventArgs e)
      {
         Intent nextActivity = new Intent(this, typeof(SecondActivity));
         StartActivity(nextActivity);
         Finish();
      }
}

public class SecondActivity : Activity
{
      protected override void OnCreate(Bundle savedInstanceState)
      {
          base.OnCreate(savedInstanceState);
          // Create your application here
          SetContentView(Resource.Layout.Second);

          var btnBackToExisting1stPage = FindViewById<Button>(Resource.Id.BackToExisting1stPage);

          btnBackToExisting1stPage.Click += OnBackPressed;
      }

      private void OnBackPressed(object sender, EventArgs e)
      {
          OnBackPressed();
      }

      public override void OnBackPressed()
      {
          Toast.MakeText(this, "Back button Pressed", ToastLength.Short).Show();
          base.OnBackPressed();         
          Finish();
      }
}

【问题讨论】:

标签: android xamarin xamarin.forms xamarin.android


【解决方案1】:

从按钮单击开始第二个活动时,您正在调用“finish()”,它会破坏 MainActivity 并创建 SecondActivity。只需删除/注释“finish()”调用。即使在单击后退按钮时,您也将保留在 MainActivity 中的实例。

【讨论】:

  • 和 startActivityForResult 有什么用?
  • startActivityForResult 如果你想启动SecondActivity,可以使用它进行一些处理并将结果返回给MainActivity。
  • 指的是你的答案“点击后退按钮” - 你的意思是安卓设备上的后退按钮? - 你的意思是它会回到与以前相同的实例?如果这是正确的,如何通过代码中的可编程按钮执行相同的操作?
  • 您可以通过编程调用 onBackPressed() 来模拟 android 硬件后退按钮,无论您在活动中需要它的任何位置。此外,如果您需要在完成之前做某事,您可以覆盖 onBackPressed 并编写您的内容,然后调用 super.onBackPressed()