问题:今天在实验xamarin中SimpleAdapter绑定到ListView时,出现闪退的现象,
解决方法:
SimpleAdapter中的构造函数public SimpleAdapter(Context context, IList<IDictionary<string, object>> data, int resource, string[] from, int[] to) 第二个构造参数IList<IDictionary<string, object>> data是一个借口,但是在创建Item的时候我使用了如下代码:
var data = new List<IDictionary<string, object>>();
IDictionary<string, object> item;
item = new Dictionary<string, object>();
item.Add("Name", "张三);
item.Add("Sex", "Male");
data.Add(item);
修改后代码如下:
var data = new List<IDictionary<string, object>>();
IDictionary<string, object> item;
item = new JavaDictionary<string, object>();
item.Add("Name", "张三);
item.Add("Sex", "Male");
data.Add(item);
使用VS2012自带的Android Device Logging 工具可以看见如下信息:
原因:
vs2012中无法使用代码检查出此问题,属于运行时问题,但是异常又无法正确抛出,通过Android Device Logging 工具才能看见,原来是因为System.Collections.Generic.Dictionary无法在运行时转换为java.util.Map,而Android.Runtime.JavaDictionary可以,至于为什么无法转换,无非就是没有继承的关系.
Mono for android是很好,但这个也太坑了吧,非要面向接口,好歹弄个文档说明一下。