首页 文章

如何将通用List对象传递给Xamarin Android中的另一个Activity?

提问于
浏览
0

我尝试制作一个Parcelable类,但 WriteToList 方法只需要 non generic List ,如何正确地将通用List传递给其他活动?

public class ParceableTextBlock : TextBlock, IParcelable
{
    public override IList<IText> Components { get; }

    protected ParceableTextBlock(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference,transfer)
    {

    }

    public int DescribeContents()
    {
        return 0;
    }

    public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
    {
        dest.WriteList(Components);
    }
}

在尝试创建 Parcelable 类之前,我尝试了以下代码

List<TextBlock> blocks = new List<TextBlock>();
Intent drawviewIntent = new Intent(this, typeof(SomeActivity));
            drawviewIntent.PutExtra("Blocks", blocks);

TextBlock类

[Register("com/google/android/gms/vision/text/TextBlock", DoNotGenerateAcw = true)]
public class TextBlock : Java.Lang.Object, IText, IJavaObject, IDisposable
{
    protected TextBlock(IntPtr javaReference, JniHandleOwnership transfer);

    public virtual Rect BoundingBox { get; }
    public virtual IList<IText> Components { get; }
    public virtual string Language { get; }
    public virtual string Value { get; }
    protected override IntPtr ThresholdClass { get; }
    protected override Type ThresholdType { get; }

    [Register("getCornerPoints", "()[Landroid/graphics/Point;", "GetGetCornerPointsHandler")]
    public virtual Point[] GetCornerPoints();
}

1 回答

  • 1

    您可以添加名为Newtonsoft.Json的NuGet Pakeage,然后您可以像这样传递List:

    List<TextBlock> blocks = new List<TextBlock>();
                Intent intent = new Intent(this, typeof(SomeActivity));
                intent.PutExtra("Blocks", JsonConvert.SerializeObject(blocks));
                StartActivity(intent);
    

    你可以像这样获得List:

    var data = JsonConvert.DeserializeObject<List<TextBlock>>(Intent.GetStringExtra("Blocks"));
    

相关问题