[ErrorLog][Xamarin] cannot convert java.lang.object
2016-08-08
之前文章( GridView 製作兩欄的列表)我們提到,關於GridView 製作這樣的列表
我希望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