public void ScrollIfNeeded() { if (scrollNeed == ScrollNeed.up && false) { CurrentMin -= PageSize; this.NotifyItemRangeInserted(0, PageSize); } if (scrollNeed == ScrollNeed.down) { CurrentMax += PageSize; this.NotifyItemRangeInserted(CurrentMax - PageSize, PageSize); } scrollNeed = ScrollNeed.none; }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { JournalDayVM vm = this[position]; vm.Sync(vm.Date); if (scrollNeed == ScrollNeed.none) { if (position == 0 && false) //12/29/15 - disabling future scrolling untill we get to FJA-95 { scrollNeed = ScrollNeed.up; } if (position > CurrentMax - CurrentMin - PageSize) { scrollNeed = ScrollNeed.down; } } View view = holder.ItemView; ((VMViewHolder <JournalDayVM>)holder).ViewModel = vm; var binding = DataContext <JournalDayVM> .FromView(view); binding.VM = vm; if (binding.Bindings.Count == 0) { binding.Add(Resource.Id.text_journal_day, x => x.DateText); binding.Add(Resource.Id.text_journal_total, x => x.SelectedPropertyTotal); binding.Add(Resource.Id.text_journal_delta, x => x.SelectedPropertyDelta); binding.Add(Resource.Id.text_journal_date, x => x.DateShort); } LinearLayout content_periods = view.FindViewById <LinearLayout>(Resource.Id.content_periods); var btnSendReport = view.FindViewById <ImageView>(Resource.Id.image_send_report); var btnEditToday = view.FindViewById <ImageView>(Resource.Id.image_go_today); btnSendReport.Click += (sender, e) => { if (OnSendReportClick != null) { OnSendReportClick(sender, vm); } }; btnEditToday.Click += (sender, e) => { if (OnCardItemClick != null) { OnCardItemClick(DateTime.Now.Period(), vm); } }; // Add Periods as needed var periods = vm.Periods; while (content_periods.ChildCount < periods.Count) { View pview = LayoutInflater.From(view.Context).Inflate(Resource.Layout.item_journal_period, content_periods, false); content_periods.AddView(pview); } Paint paint = new Paint { Color = Color.Rgb(25, 118, 210), StrokeWidth = 12 }; var goalAmount = UserSettings.Current.GetGoal(jvm.SelectedProperty); float lastDrawn = 0; // sync periods for (int i = 0; i < content_periods.ChildCount; i++) { LinearLayout periodview = content_periods.GetChildAt(i) as LinearLayout; // unneeded periods are hidden periodview.Visibility = (i < periods.Count) ? ViewStates.Visible : ViewStates.Gone; if (i < periods.Count) { var b = DataContext <JournalPeriodVM> .FromView(periodview); b.VM = periods[i]; b.VM.RelatedProperty = jvm.SelectedProperty; var p = periods[i].Period; Task.Run(() => { Platform.RunSafeOnUIThread("JournalFragment.OnResume", () => { // var width = periodview.LayoutParameters.Width; var width = periodview.Width; var pBar = periodview.FindViewById <ImageView>(Resource.Id.progressBar_period); Bitmap bitmap = Bitmap.CreateBitmap(width, 8, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(bitmap); Func <string, float> getNumber = delegate(string val) { try { var raw = string.IsNullOrEmpty(val) ? "0" : val; if (raw.Contains("/")) { var tempArr = raw.Split(new char[] { '/' }); return((float)(System.Convert.ToDecimal(tempArr[0]) / System.Convert.ToDecimal(tempArr[1]))); } else { return((float)(System.Convert.ToDecimal(raw))); } } catch (Exception ex) { LittleWatson.ReportException(ex); return(0); } }; float total = (float.IsNaN(goalAmount) || goalAmount == 0) ? getNumber(vm.SelectedPropertyTotal) : goalAmount; if (total != 0) { var thisContribution = getNumber(b.VM.Value); var startx = lastDrawn; var endx = (float)Math.Ceiling((thisContribution / total) * width) + startx; pBar.SetImageBitmap(bitmap); if (endx > 0) { lastDrawn = endx; canvas.DrawLine(startx, 0, endx, 0, paint); // System.Diagnostics.Debug.WriteLine(jvm.SelectedProperty + "- drawing for " + p.ToString() + " from:" + startx + " to:" + endx); } } }); }); periodview.Click += (sender, e) => { if (OnCardItemClick != null) { OnCardItemClick(p, vm); } }; if (b.Bindings.Count == 0) { // Period: b.Add(Resource.Id.text_journal_period_text, x => x.Text); b.Add(Resource.Id.text_journal_period_value, x => x.Value); b.Add(Resource.Id.text_journal_period_time, x => x.Time); b.Add(Resource.Id.text_journal_period_time, x => x.TimeVisibility); b.Add(Resource.Id.text_journal_period_note, x => x.Note); b.Add(Resource.Id.text_journal_period_note, x => x.NoteVisibility); } LinearLayout content_entries = periodview.FindViewById <LinearLayout>(Resource.Id.content_entries); // Add entry views as needed var lines = b.VM.Lines; while (content_entries.ChildCount < lines.Count) { View eview = LayoutInflater.From(view.Context).Inflate(Resource.Layout.item_journal_entry, content_periods, false); content_entries.AddView(eview); } // sync entries for (int j = 0; j < content_entries.ChildCount; j++) { LinearLayout entryview = content_entries.GetChildAt(j) as LinearLayout; // unneeded periods are hidden entryview.Visibility = (j < lines.Count) ? ViewStates.Visible : ViewStates.Gone; if (j < lines.Count) { // Line entryview.FindViewById <TextView>(Resource.Id.text_journal_text).Text = lines[j].Text; entryview.FindViewById <TextView>(Resource.Id.text_journal_value).Text = lines[j].Value; } } } } }