簡體   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