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);
        }
예제 #2
0
        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);
        }