Xamarin.android Intent传递对象
2016-03-30 21:33
351 查看
由于实际工作需要,可能会遇到Intent传递对象的情况,这种情况稍稍麻烦一点,在这里有三种方法可以解决这个问题:
(1) ISerializable接口
(2) IParcelable接口
(3)利用Json对对象进行序列化->反序列,得到原对象(个人推荐第三种,原因:使用简单,一两句话的事情)
这里我将采用第二种方法和第三种方法实验,各位看官可以自行对比。
方法一:利用IParcelable接口
1 新建一个类Student,继承IParcelable接口
public class Student : Java.Lang.Object, IParcelable
{
public string Name { get; set; }
public string Sex { get; set; }
public Student()
{
}
private Student(Parcel parcel)
{
Sex = parcel.ReadString();
Name = parcel.ReadString();
}
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
{
dest.WriteString(Sex);
dest.WriteString(Name);
}
#region IParcelable implementation
// The creator creates an instance of the specified object
private static readonly GenericParcelableCreator<Student> _creator
= new GenericParcelableCreator<Student>((parcel) => new Student(parcel));
[ExportField("CREATOR")]
public static GenericParcelableCreator<Student> GetCreator()
{
return _creator;
}
#endregion
}
/// <summary>
/// Generic Parcelable creator that can be used to create objects from parcels
/// </summary>
public sealed class GenericParcelableCreator<T> : Java.Lang.Object, IParcelableCreator
where T : Java.Lang.Object, new()
{
private readonly Func<Parcel, T> _createFunc;
/// <summary>
/// Initializes a new instance of the <see cref="GenericParcelableCreator{T}"/> class.
/// </summary>
/// <param name='createFromParcelFunc'>
/// Func that creates an instance of T, populated with the values from the parcel parameter
/// </param>
public GenericParcelableCreator(Func<Parcel, T> createFromParcelFunc)
{
_createFunc = createFromParcelFunc;
}
#region IParcelableCreator Implementation
public Java.Lang.Object CreateFromParcel(Parcel source)
{
return _createFunc(source);
}
public Java.Lang.Object[] NewArray(int size)
{
return new T[size];
}
#endregion
}
2 新建Activity1为测试,在MainActivity中发送对象,代码如下:
在Activity中接收对象:
方法二:利用Json对对象进行序列化(需自己添加Json库)
参考文章地址:
http://stackoverflow.com/questions/26046668/pass-data-from-one-activity-to-another-in-xamarin-android
最后附上Demo地址:http://download.csdn.net/detail/sinat_26562875/9477273
请大家多多指正~~~
(1) ISerializable接口
(2) IParcelable接口
(3)利用Json对对象进行序列化->反序列,得到原对象(个人推荐第三种,原因:使用简单,一两句话的事情)
这里我将采用第二种方法和第三种方法实验,各位看官可以自行对比。
方法一:利用IParcelable接口
1 新建一个类Student,继承IParcelable接口
public class Student : Java.Lang.Object, IParcelable
{
public string Name { get; set; }
public string Sex { get; set; }
public Student()
{
}
private Student(Parcel parcel)
{
Sex = parcel.ReadString();
Name = parcel.ReadString();
}
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
{
dest.WriteString(Sex);
dest.WriteString(Name);
}
#region IParcelable implementation
// The creator creates an instance of the specified object
private static readonly GenericParcelableCreator<Student> _creator
= new GenericParcelableCreator<Student>((parcel) => new Student(parcel));
[ExportField("CREATOR")]
public static GenericParcelableCreator<Student> GetCreator()
{
return _creator;
}
#endregion
}
/// <summary>
/// Generic Parcelable creator that can be used to create objects from parcels
/// </summary>
public sealed class GenericParcelableCreator<T> : Java.Lang.Object, IParcelableCreator
where T : Java.Lang.Object, new()
{
private readonly Func<Parcel, T> _createFunc;
/// <summary>
/// Initializes a new instance of the <see cref="GenericParcelableCreator{T}"/> class.
/// </summary>
/// <param name='createFromParcelFunc'>
/// Func that creates an instance of T, populated with the values from the parcel parameter
/// </param>
public GenericParcelableCreator(Func<Parcel, T> createFromParcelFunc)
{
_createFunc = createFromParcelFunc;
}
#region IParcelableCreator Implementation
public Java.Lang.Object CreateFromParcel(Parcel source)
{
return _createFunc(source);
}
public Java.Lang.Object[] NewArray(int size)
{
return new T[size];
}
#endregion
}
2 新建Activity1为测试,在MainActivity中发送对象,代码如下:
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { Student stu=new Student(); stu.Name = "Intent对象"; stu.Sex = "第五种生物"; button.Text = string.Format("{0} clicks!", count++); Intent intent=new Intent(this,typeof(Activity1)); intent.PutExtra("mode", stu); StartActivity(intent); }; }
在Activity中接收对象:
public class Activity1 : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); var my_class = Intent.GetParcelableExtra("mode") as Student; } }Debug结果:
方法二:利用Json对对象进行序列化(需自己添加Json库)
参考文章地址:
http://stackoverflow.com/questions/26046668/pass-data-from-one-activity-to-another-in-xamarin-android
最后附上Demo地址:http://download.csdn.net/detail/sinat_26562875/9477273
请大家多多指正~~~
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories