private void Favorite_Click(object sender, EventArgs e) { View view = sender as View; StepViewHolder viewHolder = viewHolders.First(vh => vh.ItemView == view.Parent); Step step = Route.Steps[viewHolder.AdapterPosition]; bool favorite = !step.Stop.GetIsFavorite(); step.Stop.SetIsFavorite(favorite); NotifyItemChanged(viewHolder.AdapterPosition); }
public void OnClick(View view) { StepViewHolder viewHolder = viewHolders.First(vh => vh.ItemView == view); Step step = Route.Steps[viewHolder.AdapterPosition]; Intent intent = new Intent(view.Context, typeof(StopActivity)); intent.PutExtra("Stop", step.Stop.Id); intent.PutExtra("Line", step.Route.Line.Id); view.Context.StartActivity(intent); }
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) { // Late load icons if (stopBitmap == null) { stopBitmap = Utils.GetStopIconForLine(parent.Context, Route.Line, StopIconSize); transportBitmap = Utils.GetTransportIconForLine(parent.Context, Route.Line, TransportIconSize); } View itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.StepItem, parent, false); itemView.SetOnClickListener(this); StepViewHolder viewHolder = new StepViewHolder(itemView) { FavoriteClick = Favorite_Click }; viewHolder.Icon1.SetImageBitmap(transportBitmap); viewHolder.Icon2.SetImageBitmap(transportBitmap); viewHolder.Dot.SetImageBitmap(stopBitmap); return(viewHolder); }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { StepViewHolder viewHolder = holder as StepViewHolder; Step step = Route.Steps[position]; // First update if (holder.OldPosition == -1) { viewHolder.Name.Text = step.Stop.Name; viewHolder.Rail1.SetBackgroundColor(color); viewHolder.Rail2.SetBackgroundColor(color); viewHolder.Rail1.Visibility = position == 0 ? ViewStates.Gone : ViewStates.Visible; viewHolder.Rail2.Visibility = position == Route.Steps.Length - 1 ? ViewStates.Gone : ViewStates.Visible; } // Update texts viewHolder.Favorite.SetImageResource(step.Stop.GetIsFavorite() ? Resource.Drawable.ic_star : Resource.Drawable.ic_star_border); if (stepTimes != null) { TimeStep[] timeSteps = stepTimes[position]; if (timeSteps.Length > 0) { viewHolder.Description.Text = Utils.GetReadableTimes(timeSteps, DateTime.Now); } else { viewHolder.Description.Text = "Service terminé"; } } else { viewHolder.Description.Text = "Informations non disponibles"; } // Update icon positions if (stepTransports != null) { float density = viewHolder.ItemView.Context.Resources.DisplayMetrics.Density; { Transport currentTransport = position == stepTransports.Length ? null : stepTransports[position]; float currentPosition = currentTransport == null ? 72 : (int)(1 + 36 - 16 + 72 * currentTransport.Progress); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int)(32 * density), (int)(32 * density)); layoutParams.AddRule(LayoutRules.CenterHorizontal); layoutParams.SetMargins(0, (int)(currentPosition * density), 0, 0); viewHolder.Icon1.LayoutParameters = layoutParams; } { Transport previousTransport = position == 0 ? null : stepTransports[position - 1]; float previousPosition = previousTransport == null ? 72 : (int)(-1 - 36 - 16 + 72 * previousTransport.Progress); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int)(32 * density), (int)(32 * density)); layoutParams.AddRule(LayoutRules.CenterHorizontal); layoutParams.SetMargins(0, (int)(previousPosition * density), 0, 0); viewHolder.Icon2.LayoutParameters = layoutParams; } } if (!viewHolders.Contains(viewHolder)) { viewHolders.Add(viewHolder); } }