Xamarin Forms Android Activity Bundle为空

时间:2019-05-14 15:48:10

标签: android xamarin xamarin.forms xamarin.android

我正在尝试从Xamarin Forms Android应用中的服务创建辅助活动。该活动似乎开始就很好。我需要向其中传递一些数据,但是OnCreate方法参数Bundle始终为null。

在我的PCL项目中的一个页面上,该服务被调用:

protected override void OnAppearing()
{
    base.OnAppearing();

    ISampleService service = DependencyService.Get<ISampleService>();
    service.ProcessSampleData(6);
}

android服务:

[assembly: Dependency(typeof(SampleService))]

namespace ServiceActivityTester.Droid
{
    [Service]
    public class SampleService : ISampleService
    {
        public bool ProcessSampleData(int sampleData)
        {
            Context context = MainActivity.Instance;
            MainActivity activity = (MainActivity)context;

            Intent intent = new Intent(
                context, typeof(SampleActivity));
            intent.PutExtra("SampleData", sampleData);

            activity.StartActivityForResult(intent, 100);
            // context.StartActivity(intent);

            return true;
        }
    }
}

次要活动:

namespace ServiceActivityTester.Droid
{
    [Activity(Label = "SampleActivity")]
    public class SampleActivity
        : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            // savedInstanceState == null always!
            base.OnCreate(savedInstanceState);

            int sampleData = savedInstanceState.GetInt("SampleData");
            System.Diagnostics.Debug.WriteLine(sampleData.ToString());
        }
    }
}

我的清单文件与创建时的文件相同。

如何获取Bundle数据不为空(因此,我可以检索SampleData putExtra数据)?

1 个答案:

答案 0 :(得分:1)

您可能想使用Intent属性来获取传递给Activity的参数。

类似:

int sampleData = Intent.GetIntExtra("SampleData", 0);

如果在Intent中找不到该值,0将是您想要的属性默认值。

注意: savedInstanceState 用于从以前的状态中获取已保存的值(如果已保存的话)。

希望这会有所帮助。-