先日以下のような記事を書きました。
Xamarin.Android + ReactivePropertyでListViewを使う - かずきのBlog@hatena
別にReactivePropertyのコレクションじゃなくて普通のコレクションを対象にしてかけるじゃないということで、仕立て直してnugetに放流しました。毎回作りそうなコードだったので。
NuGet Gallery | Runceel.XamarinAndroid 1.0.0
使い方
IList>T<とObservableCollection>T<とReadOnlyReactiveCollection>T<にToAdapterという拡張メソッドを定義しています。ObservableCollectionとReadOnlyObservableCollectionから生成されるAdapterはコレクションに変更があったときに自動でNotifyDataSetChangedが呼び出されます。
ToAdapter拡張メソッドの引数は以下のような感じになってます。
- createRowView: positionと要素から行を表示するためのViewを生成する処理
- setRowData: positionと要素とViewが渡されるのでViewに値を設定する処理
- getId: psoitionと要素からidを返す処理(省略した場合はpositionがidになります)
こんな感じで使います。
this.list = new ObservableCollection<string>(); this.ListAdapter = this.list.ToAdapter( (_, __) => LayoutInflater.FromContext(this).Inflate(Android.Resource.Layout.SimpleListItem1, null), (_, x, v) => v.FindViewById<TextView>(Android.Resource.Id.Text1).Text = x);