繁体   English   中英

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

[英]Do I really need to use Intent to call activity?

我真的需要使用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);
}

第三个活动:

 [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";
        }
}

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

选项 1 - 工厂方法:

通常在构造函数是私有的情况下使用工厂方法。 这个想法是一些工作必须在运行时完成,你不想面对你班级的普通用户。 或者您正在使用单例模式。

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

选项 2 - 初始化程序:

对象初始值设定项是 C# 中的一个东西。 现在,它是相当重要的一点是初始化器是一样的Parametized构造函数。 它只是语法糖。 使用初始化程序,您可以调用无参数构造函数,然后将值分配给公共变量/字段,就像您将它写在几行上一样。

选项 3 - 反向链接:

通常,当您链接构造函数时,您会从参数最少的那个链接到最多. 每一步都添加一个新的默认值。 正常方向远离无参数构造函数。 请记住,一旦添加了任何构造函数,隐式无参数构造函数将不再存在——您必须使其成为显式构造函数。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM