[ErrorLog][Xamarin] cannot convert java.lang.object

2016-08-08

之前文章( GridView 製作兩欄的列表)我們提到,關於GridView 製作這樣的列表
Screenshot_20160808-165930

我希望item 被點了之後可以inflate某一個fragment ,之前我關於List的部分,我會把呼叫的事件寫在getView 那邊,但是事實上在GridView 這邊會產生錯亂,所以我們必須要去加入 ItemClick事件 

gridView.ItemClick += GridView_ItemClick;

原本以為很溫馨的可以透過  gridView.GetItemAtPosition(e.Position) 就可以拿到,事實上不然 他會出現 cannot convert java.lang.object to xxx class
這時候我們該怎麼做,首先開一個 ObjectTypeHelper 負責將 java.lang.object 轉成你要的物件

public static class ObjectTypeHelper
{
    public static T Cast<T>(this Java.Lang.Object obj) where T : class
    {
        var propertyInfo = obj.GetType().GetProperty("Instance");
        return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T;
    }
}

ItemClick Event :

private void GridView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    var d = gridView.GetItemAtPosition(e.Position).Cast<UserInfo>().Name;
 
    var ft = _Activity.FragmentManager.BeginTransaction();
    ft.AddToBackStack(null);
    ft.Replace(Resource.Id.HomeFrameLayout, new detailpage(d));
    ft.Commit();
}

這是一個小技巧網路上查一下才知道筆記一下。

reference : https://forums.xamarin.com/discussion/7894/how-to-convert-a-type-to-java-lang-object


當麻許的超技八 2014 | Donma Hsu Design.