public MainLogSuggestionsListViewHolder(View itemView, SuggestionsViewModel suggestionsViewModel) : base(itemView) { this.suggestionsViewModel = suggestionsViewModel; hintTextView = ItemView.FindViewById <TextView>(Resource.Id.SuggestionsHintTextView); indicatorTextView = ItemView.FindViewById <TextView>(Resource.Id.SuggestionsIndicatorTextView); suggestionsRecyclerView = ItemView.FindViewById <RecyclerView>(Resource.Id.SuggestionsRecyclerView); suggestionsRecyclerView.SetLayoutManager(new LinearLayoutManager(ItemView.Context, LinearLayoutManager.Horizontal, false)); var snapMargin = 16.DpToPixels(ItemView.Context); var snapHelper = new SuggestionsRecyclerViewSnapHelper(snapMargin); snapHelper.AttachToRecyclerView(suggestionsRecyclerView); mainSuggestionsRecyclerAdapter = new MainSuggestionsRecyclerAdapter(); mainSuggestionsRecyclerAdapter.SuggestionTaps .Subscribe(suggestionsViewModel.StartTimeEntry.Inputs) .DisposedBy(DisposeBag); suggestionsRecyclerView.SetAdapter(mainSuggestionsRecyclerAdapter); suggestionsViewModel.Suggestions .Subscribe(onSuggestionsChanged) .DisposedBy(DisposeBag); suggestionsViewModel.IsEmpty .Invert() .Subscribe(updateViewVisibility) .DisposedBy(DisposeBag); var suggestionCount = suggestionsViewModel.Suggestions.Select(s => s.Length); var currentIndexAndSuggestionCount = Observable.CombineLatest(snapHelper.CurrentIndexObservable, suggestionCount, (currIndx, count) => (currIndx, count)); currentIndexAndSuggestionCount.Do(tuple => { var currIdx = tuple.Item1; var count = tuple.Item2; onCurrentSuggestionIndexChanged(count, currIdx); }) .Subscribe() .DisposedBy(DisposeBag); }
public MainLogSuggestionsListViewHolder(View itemView, SuggestionsViewModel suggestionsViewModel) : base(itemView) { this.suggestionsViewModel = suggestionsViewModel; hintTextView = ItemView.FindViewById <TextView>(Resource.Id.SuggestionsHintTextView); indicatorTextView = ItemView.FindViewById <TextView>(Resource.Id.SuggestionsIndicatorTextView); suggestionsRecyclerView = ItemView.FindViewById <RecyclerView>(Resource.Id.SuggestionsRecyclerView); suggestionsRecyclerView.SetLayoutManager(new LinearLayoutManager(ItemView.Context, LinearLayoutManager.Horizontal, false)); var snapMargin = 16.DpToPixels(ItemView.Context); var snapHelper = new SuggestionsRecyclerViewSnapHelper(snapMargin); snapHelper.AttachToRecyclerView(suggestionsRecyclerView); this.Bind(snapHelper.CurrentIndexObservable, onCurrentSuggestionIndexChanged); mainSuggestionsRecyclerAdapter = new MainSuggestionsRecyclerAdapter(); this.Bind(mainSuggestionsRecyclerAdapter.SuggestionTaps, onSuggestionTapped); suggestionsRecyclerView.SetAdapter(mainSuggestionsRecyclerAdapter); var collectionChangesObservable = Observable.FromEventPattern <NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>( e => this.suggestionsViewModel.Suggestions.CollectionChanged += e, e => this.suggestionsViewModel.Suggestions.CollectionChanged -= e); var collectionChangedObservable = collectionChangesObservable .Select(args => this.suggestionsViewModel.Suggestions.ToImmutableList()) .StartWith(this.suggestionsViewModel.Suggestions.ToImmutableList()); var suggestionsCountObservable = collectionChangesObservable .Select(args => this.suggestionsViewModel.Suggestions.Count) .StartWith(this.suggestionsViewModel.Suggestions.Count) .DistinctUntilChanged(); this.Bind(collectionChangedObservable, onSuggestionsCollectionChanged); this.Bind(suggestionsCountObservable, onCollectionCountChanged); }