2017-11-28 2 views
0

Ich benutze Xamarin.Android mit ReactiveUI und ich versuche, eine Benutzerdefinierte ListView mit ReactiveUI zu implementieren.Wie ReactiveUI ReactiveList mit Xamarin.Android ListView mit Customized ListView Layout korrekt zu implementieren

Gibt es eine Möglichkeit, um Daten binden an die benutzerdefinierten implementierten Kontrollen wie EditTexts, Textviews im Listview wie über ein Listview-Adopter Aufblasen und durch einen onClickListner Einstellung?

Ich habe Konzepte mit weniger Beispielen und Dokumentation wie ReactiveListAdopter diese verwendet werden können, gesehen?

Adopter

public class OutletScreenAdopter : BaseAdapter<OutletModel> 
     { 
      List<OutletModel> items; 
      Activity context; 
      public OutletScreenAdopter(Activity context, List<OutletModel> items) : base() 
      { 
       this.context = context; 
       this.items = items; 
      } 
      public override long GetItemId(int position) 
      { 
       return position; 
      } 
      public override OutletModel this[int position] 
      { 
       get { return items[position]; } 
      } 
      public override int Count 
      { 
       get { return items.Count; } 
      } 
      public override View GetView(int position, View convertView, ViewGroup parent) 
      { 
       var item = items[position]; 
       View view = convertView; 
       if (view == null) // no view to re-use, create new 
        view = context.LayoutInflater.Inflate(Resource.Layout.ViewCell_OutletBasic, null); 
       view.FindViewById<TextView>(Resource.Id.ViewCellOutletTxtOutletTitle).Text = item.OutletName; 
       view.FindViewById<TextView>(Resource.Id.ViewCellOutletTxtOutletCode).Text = item.OutletCode; 

       return view; 
      } 
     } 

Hauptaktivität

ReactiveList<OutletListResult> OutletListItems; 
public ListView OutletListViewMain { get; private set; } 
.... 

public void SetupReactiveLists(Activity context) 
     { 
      List<OutletModel> items = new List<OutletModel>(); 

      foreach (var item in OutletListItems) 
      { 
       OutletModel outlet = new OutletModel 
       { 
        OutletName = item.OutletName, 
        OutletCode = item.OutletCode 
       }; 

       items.Add(outlet); 
      } 

      OutletListViewMain.Adapter = new OutletScreenAdopter(context, items); 
     } 

Antwort

1

ich hier ein Beispiel heute geteilt: https://stackoverflow.com/a/47527601/2782141

können Sie die ReactiveListAdapter verwenden und Ihre Artikel und einen View-Erstellung Delegierten liefern im Konstruktor. Das ist alles dazu.

Aber wie Julien Mialon sagt, Leistung und Benutzerfreundlichkeit-weise ist es besser, einen RecyclerView zu wechseln.

2

Aus meiner Sicht sollten Sie eine RecyclerView anstelle eines Listview verwenden. Und in diesem Fall könnte der Adapter ItemChanged abonnieren, um Elemente in der Liste hinzuzufügen/zu entfernen/zu verschieben.

ich auf irgendeine Sache gearbeitet, die (I Sache) wiederverwendet werden können: https://github.com/Ideine/Xmf2/blob/develop-rx/src/Xmf2.Rx.Droid/ListElement/BaseReactiveRecyclerViewAdapter.cs

+0

Isnt es eine Implementierung für das Listview jede Art von RxUI-Adopter oder RxUI Konzept? –

+0

Listview hat wirklich schlechte Leistung, wenn Sie viele Elemente, so dass sie nicht weit verbreitet, da die RecyclerView zur Verfügung steht. Ich denke, deshalb gibt es keinen integrierten Adapter in ReactiveUI für ListView. Aber wenn Sie wirklich verwenden wollen Listview, ich glaube, Sie leicht RecyclerView Adapter in Listview verwendet werden anpassen können, sowohl in Bezug auf das Verhalten ziemlich nah dran sind –

Verwandte Themen