2017-08-21 5 views
0

je dois sauver tableau d'objet en paquet, voici ce que je faisais:Xamarin bundle Android mis tableau parcelable

créer la classe ce qui est implémentant l'interface 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; 
     } 
    } 

quand je crée exemple de mon fragment, en essayant de mettre ensemble de SimpleSelectorItem en bundle:

 var items = _viewModel.GetEmployees().Select(l => new SimpleSelectorItem(l.Id, l.LegalName)).ToArray(); 
     .... 
    args.PutParcelableArray(ITEMS, items); 

Mais quand je suis en train de revenir ce tableau, il est un tableau de valeurs nulles ..

var items = Arguments.GetParcelableArray(ITEMS); 

Voici application de démonstration, il jette exception alors que je suis en train de jeter les articles: https://github.com/Nininea/XamarinAndroidPutParcelableArray

+0

J'ai fait une démonstration de base avec le saut entre les activités avec les données paquet, mais n'a pas reproduit votre problème, pourriez-vous s'il vous plaît fournir une démo de base qui peut reproduire le problème? –

+0

Question mise à jour, j'ai ajouté le lien de l'application de démonstration – Nininea

Répondre

1

Mais quand je suis en train de revenir ce tableau, il est un tableau de valeurs nulles ..

J'ai testé le projet. Les données sont transmises correctement, mais la distribution a échoué.

Pour résoudre le problème, vous devez jeter le tableau différemment:

Dans SetData Méthode:

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; 
    } 
+0

fonctionne très bien, merci :) – Nininea