Как передать объект общего списка другому действию в другое занятие в Android Xamarin? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытался создать класс Parcelable, но метод WriteToList требует только non generic 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);
    }
}

enter image description here

Я попробовал приведенный ниже код, прежде чем пытаться создать Parcelable класс

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

enter image description here

Класс 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 Ответ

0 голосов
/ 10 декабря 2018

Вы можете добавить NuGet Pakeage с именем Newtonsoft.Json, затем вы можете передать список следующим образом:

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

, и вы можете получить список следующим образом:

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