C#-Xamarin的Activity傳值與Fragment引用


前言

我們學習任何一個新框架時,肯定都需要學習它的子頁面用法,因為子頁面是封裝公共內容最好的容器。

在Xamarin里子頁面為Fragment,翻譯過來是片段的意思。

Fragment

下面我們來學習Fragment的用法。

首先創建一個類MenuFragment繼承Fragment;然后重寫他的OnCreateView方法,代碼如下:

[Activity(Label = "KibaApp")]
public class MenuFragment : Fragment
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    { 
        View view = inflater.Inflate(Resource.Layout.MenuFragment, container, false); 
        return view; 
    }
}

在Fragment里也是有OnCreate方法可以被重寫的,但這里我們要重寫的是OnCreateView,這點需要留意一下。

接着,我們做了視圖一個填充,將制定的MenuFragment.axml填充進視圖View中;這里的子頁面視圖MenuFragment.axml只是普通的界面布局。

這樣,我們的子頁面就做好了;下面需要做的就是到主頁面里引用這個子頁面。

引用Fragment

在主頁面的axml視圖中,我們定義一個fragment,然后編寫代碼如下:

<fragment
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:id="@+id/fragment_menu"
    android:name="KibaApp.MenuFragment" />

如上代碼所示,我們可以看到,最后一行的代碼稍微有點特別,我們來分析一下。

這行代碼中的name屬性的值是KibaApp.MenuFragment,我們會發現這個值根本就是一個完全限定名。

也就是說fragment標簽是利用自身的name屬性儲存的完全限定名,然后用其來反射找到我們的子頁面,然后顯示。

理解了原理后,我們運行程序看下子頁面的效果。

如圖所示,我們成功引入了子頁面。

Activity之間傳值

 Android的頁面之間傳值是比較特別,它是使用Intent的PutExtra方法來傳值的。

而PutExtra方法是一個被重載的方法,如下圖所示:

也就是說,PutExtra只能傳圖中給定類型的參數,想傳自定義類型的參數是不可以的。

下面我們定義一個按鈕點擊事件,然后傳遞兩個參數給新的頁面。

Button btnPara = this.FindControl<Button>("btnPara");
btnPara.Click += (s, e) =>
{
    Intent intent = new Intent(this, typeof(ParamActivity));
    intent.PutExtra("para1", "Kiba518");
    intent.PutExtra("para2", 518);
    StartActivity(intent);
};

如上述代碼所示,我們向ParamActivity傳遞了兩個參數。

下面我們去ParamActivity中接收這兩個參數:

 protected override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);
     SetContentView(Resource.Layout.ParamActivity);
     string para1 =  this.Intent.GetStringExtra("para1");
     int para2 = this.Intent.GetIntExtra("para2",-1);
     this.ShowToast("para1:" + para1 + "===para2:" + para2);
 }

如上述代碼所示,我們使用Activity的屬性Intent的GetStringExtra方法接收了第一個參數,而接收第二個參數,我們使用了GetIntExtra方法。

也就是說,在接收上個頁面傳來的數據時,我們需要根據數據類型,來調用該類型對應的接收方法,來接收數據。

參數傳遞界面如下圖所示:

----------------------------------------------------------------------------------------------------

到此Activity傳值與Fragment引用就介紹完了。

框架代碼已經傳到Github上了,歡迎大家下載。

相關文章:

C#-Xamarin利用ZXing.Net.Mobile進行掃碼

C#-Xamarin的Android項目開發(三)——發布、部署、打包

C#-Xamarin的Android項目開發(二)——控件應用

C#-Xamarin的Android項目開發(一)——創建項目

Github地址:https://github.com/kiba518/KibaApp

----------------------------------------------------------------------------------------------------

注:此文章為原創,任何形式的轉載都請聯系作者獲得授權並注明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM