xamarin android bundle put parcelable 数组
xamarin android bundle put parcelable array
我需要在包中保存对象数组,这是我所做的:
创建 class 实现 IParcable 接口的内容:
public class SimpleSelectorItem : Java.Lang.Object, Android.OS.IParcelable
{
public int Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
IntPtr IJavaObject.Handle { get { return IntPtr.Zero; } }
public int DescribeContents()
{
return 0;
}
public SimpleSelectorItem()
{
}
public SimpleSelectorItem(int id, string name)
{
Id = id;
Name = name;
}
public SimpleSelectorItem(Parcel parcel)
{
Id = parcel.ReadInt();
Name = parcel.ReadString();
}
public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
{
dest.WriteInt(Id);
dest.WriteString(Name);
}
static readonly GenericParcelableCreator<SimpleSelectorItem> _creator
= new GenericParcelableCreator<SimpleSelectorItem>((parcel) => new SimpleSelectorItem(parcel));
[ExportField("CREATOR")]
public static GenericParcelableCreator<SimpleSelectorItem> GetCreator()
{
return _creator;
}
}
当我创建片段的实例时,尝试在包中设置 SimpleSelectorItem 数组:
var items = _viewModel.GetEmployees().Select(l => new SimpleSelectorItem(l.Id, l.LegalName)).ToArray();
....
args.PutParcelableArray(ITEMS, items);
但是当我取回这个数组时,它是空数组..
var items = Arguments.GetParcelableArray(ITEMS);
这是演示应用程序,它在我尝试投射项目时抛出异常:
https://github.com/Nininea/XamarinAndroidPutParcelableArray
But when I'm getting back this array, it is array of nulls..
我测试过 project.The 数据正确传递,但转换失败。
要解决此问题,您需要以不同方式转换数组:
在SetData
方法中:
private void SetData(View rootView)
{
...
//use the following line to retrieve and cast the items to SimpleSelectorItem[]
var items = Arguments.GetParcelableArray(ITEMS).Cast<SimpleSelectorItem>().ToList();
_lvSelector = (ListView)rootView.FindViewById(Resource.Id.lvSelector);
//pass the items to your adapter.
SimpleSelectorListAdapter adapter = new SimpleSelectorListAdapter(Activity, items);
_lvSelector.Adapter = adapter;
}
我需要在包中保存对象数组,这是我所做的:
创建 class 实现 IParcable 接口的内容:
public class SimpleSelectorItem : Java.Lang.Object, Android.OS.IParcelable
{
public int Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
IntPtr IJavaObject.Handle { get { return IntPtr.Zero; } }
public int DescribeContents()
{
return 0;
}
public SimpleSelectorItem()
{
}
public SimpleSelectorItem(int id, string name)
{
Id = id;
Name = name;
}
public SimpleSelectorItem(Parcel parcel)
{
Id = parcel.ReadInt();
Name = parcel.ReadString();
}
public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
{
dest.WriteInt(Id);
dest.WriteString(Name);
}
static readonly GenericParcelableCreator<SimpleSelectorItem> _creator
= new GenericParcelableCreator<SimpleSelectorItem>((parcel) => new SimpleSelectorItem(parcel));
[ExportField("CREATOR")]
public static GenericParcelableCreator<SimpleSelectorItem> GetCreator()
{
return _creator;
}
}
当我创建片段的实例时,尝试在包中设置 SimpleSelectorItem 数组:
var items = _viewModel.GetEmployees().Select(l => new SimpleSelectorItem(l.Id, l.LegalName)).ToArray();
....
args.PutParcelableArray(ITEMS, items);
但是当我取回这个数组时,它是空数组..
var items = Arguments.GetParcelableArray(ITEMS);
这是演示应用程序,它在我尝试投射项目时抛出异常: https://github.com/Nininea/XamarinAndroidPutParcelableArray
But when I'm getting back this array, it is array of nulls..
我测试过 project.The 数据正确传递,但转换失败。
要解决此问题,您需要以不同方式转换数组:
在SetData
方法中:
private void SetData(View rootView)
{
...
//use the following line to retrieve and cast the items to SimpleSelectorItem[]
var items = Arguments.GetParcelableArray(ITEMS).Cast<SimpleSelectorItem>().ToList();
_lvSelector = (ListView)rootView.FindViewById(Resource.Id.lvSelector);
//pass the items to your adapter.
SimpleSelectorListAdapter adapter = new SimpleSelectorListAdapter(Activity, items);
_lvSelector.Adapter = adapter;
}