我真的需要使用Intent来调用活动吗?

问题描述 投票:3回答:1

我是否真的需要使用Intent来调用活动表格,如下所示?如您所见,我还传递了Dog之类的某些对象,并在OnCreate方法内接受了第三项活动。我的问题是,就像我可以在第三个活动中创建构造函数并在其中传递一些参数,而不是使用Intentbundle传递值一样吗,或者就像必须这样做那样?

我从其他活动中称呼第三活动:

private void OpenOtherActivityWindow_Click(object sender, EventArgs e)

{
      Intent nextActivity = new Intent(this, typeof(ThirdActivity));
      Dog mydog = new Dog("mydogName");
      Bundle bundle = new Bundle();
      bundle.PutSerializable("mydoggy", mydog);
      nextActivity.PutExtra("RowID", Convert.ToString(10));
      nextActivity.PutExtras(bundle);
      StartActivity(nextActivity);
}

ThirdActivity:

 [Activity(Label = "ThirdActivity")]
 public class ThirdActivity : Activity
 {
       protected override void OnCreate(Bundle savedInstanceState)
       {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.third);

            //Receive values if any from previous activity
            if (!Intent.HasExtra("mydoggy")) return;
            Dog tryme = (Dog)Intent.GetSerializableExtra("mydoggy");
            if (!Intent.HasExtra("RowID")) return;
            string text = Intent.GetStringExtra("RowID") ?? "0";
        }
}
c# xamarin xamarin.android
1个回答
0
投票

根据Selvin,这些构造函数必须保持无参数。我没有相反的信息。但这并不意味着您无法使其更容易使用/创建这些实例。

选项1-工厂方法:

通常,对于构造函数为Private的情况,请使用Factory方法。这样的想法是必须在运行时完成一些工作,您不想与类的普通用户面对。或者您正在使用单例模式。

一个调用公共构造函数然后设置一些公共字段的函数会很奇怪,但是有可能

选项2-初始化程序:

Object Initializers是C#中的东西。现在,了解初始化器与参数化构造器not相同非常重要。这只是语法糖。使用Initializer调用无参数构造函数,然后将值分配给公共变量/字段,就像您在多行上写的一样。

选项3-反向链接:

通常,在链接构造函数时,是从具有least参数的链到具有most的链。每一步都添加一个新的默认值。宏方向远离无参数构造函数。请记住,一旦添加任何构造函数,隐式无参数构造函数将不再存在-您必须使其成为显式的。

假设它不是您要处理的密封类,或者特定情况将其限制为单个构造函数,则可以对其进行子类化并添加许多参数化的构造函数。 Wich都只是通过链接来调用parameterelss基本构造函数,然后分配值。

如果您确实遇到问题的情况之一:特别是对于那些情况,已经发明了扩展方法。

© www.soinside.com 2019 - 2024. All rights reserved.