我是Xamarin的新手。我需要通过intent将数据列表从一个活动传递到另一个活动。并在另一个活动屏幕中获取这些数据并处理这些数据。请提出解决方案。
提前致谢
答案 0 :(得分:1)
我对此有所不同。我创建了一个继承自Java.Lang.Object, ISerializable
的基类,以便我可以使用Bundle.PutSerializable(string key, ISerializable value)
在活动之间传递我的对象。
[Flags]
public enum ObjectState
{
Normal = 0,
New = 1,
Modified = 2,
Removed = 4
}
public abstract class ObjectBase : Java.Lang.Object, ISerializable
{
public Guid Id { get; set; }
public ObjectState State { get; set; }
protected ObjectBase(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
{
}
protected ObjectBase()
{
}
[Export("readObject", Throws = new[] { typeof(IOException), typeof(Java.Lang.ClassNotFoundException) })]
private void ReadObject(ObjectInputStream stream)
{
this.Deserialize(stream);
}
[Export("writeObject", Throws = new[] { typeof(IOException), typeof(Java.Lang.ClassNotFoundException) })]
private void WriteObject(ObjectOutputStream stream)
{
this.Serialize(stream);
}
protected virtual void Deserialize(ObjectInputStream stream)
{
this.Id = Guid.Parse(stream.ReadUTF());
this.State = (ObjectState)stream.ReadInt();
}
protected virtual void Serialize(ObjectOutputStream stream)
{
stream.WriteUTF(this.Id.ToString());
stream.WriteInt((int)this.State);
}
}
public class Person : ObjectBase
{
public string Name { get; set; }
public int Age { get; set; }
public bool IsMarried { get; set; }
public DateTime? Anniversary { get; set; }
protected override void Deserialize(ObjectInputStream stream)
{
base.Deserialize(stream);
if (stream.ReadBoolean())
this.Name = stream.ReadUTF();
this.Age = stream.ReadInt();
this.IsMarried = stream.ReadBoolean();
if (stream.ReadBoolean())
this.Anniversary = DateTime.Parse(stream.ReadUTF());
}
protected override void Serialize(ObjectOutputStream stream)
{
base.Serialize(stream);
stream.WriteBoolean(this.Name != null);
if (this.Name != null)
stream.WriteUTF(this.Name);
stream.WriteInt(this.Age);
stream.WriteBoolean(this.IsMarried);
stream.WriteBoolean(this.Anniversary != null);
if (this.Anniversary != null)
stream.WriteUTF(this.Anniversary.Value.ToString(CultureInfo.InvariantCulture));
}
}
然后我可以通过执行以下操作将Person对象列表传递给新的Activity:
List<Person> persons = new List<Person>();
var intent = new Intent(this, typeof(MyActivity));
var bundle = new Bundle();
for (int i = 0; i < persons.Count; i++)
{
var p = persons[i];
bundle.PutSerializable("Person" + i, p);
}
intent.PutExtras(bundle);
this.StartActivity(intent);
然后接受这样的对象:
protected override void OnCreate(Bundle bundle)
{
List<Person> persons = new List<Person>();
int i = 0;
while (bundle.ContainsKey("Person" + i))
{
var p = (Person) bundle.GetSerializable("Person" + i);
persons.Add(p);
i++;
}
base.OnCreate(bundle);
}
答案 1 :(得分:0)
要将内容列表从一个活动传递到其他活动,您可以使用parcelable类。它是一种捆绑类型,我们可以将任何类型的内容从一个活动传递到其他活动。唯一的问题是您只需根据需要自定义parcelable类。
请访问此Link或下载此示例项目,以便了解有关将内容列表从一个活动传递到其他活动的详情。
希望这能解决您的问题。
答案 2 :(得分:0)
使用泛型类型的IList将数据从一个活动传递到另一个活动所需的数据。
IList<String> Mon_year = new List<String>();
然后在意图
中传递此List i.PutStringArrayListExtra("month_year",Mon_year);
在另一项活动中(您想要获取已发送的数据)
IList<String> Mon_year = Intent.GetStringArrayListExtra("month_year") ;// here u get the Ilist of String data...