private void ConfigureMoreOptionsMenu(WorkoutViewHolder workoutViewHolder) { if (!workoutViewHolder.MoreOptionsButton.HasOnClickListeners) { workoutViewHolder.MoreOptionsButton.Click += delegate(object sender, EventArgs e) { workoutViewHolder.MoreOptionsButton.Visibility = ViewStates.Invisible; workoutViewHolder.MoreOptionsMenu.Visibility = ViewStates.Visible; }; } if (!workoutViewHolder.SaveWorkoutBtn.HasOnClickListeners) { workoutViewHolder.SaveWorkoutBtn.Click += delegate(object sender2, EventArgs e2) { workoutViewHolder.MoreOptionsButton.Visibility = ViewStates.Visible; workoutViewHolder.MoreOptionsMenu.Visibility = ViewStates.Gone; Toast.MakeText(context, context.GetString(Resource.String.workout_saved, workoutViewHolder.Title.Text.ToString()), ToastLength.Long).Show(); }; } if (!workoutViewHolder.EditWorkoutBtn.HasOnClickListeners) { workoutViewHolder.EditWorkoutBtn.Click += delegate(object sender3, EventArgs e3) { workoutViewHolder.MoreOptionsButton.Visibility = ViewStates.Visible; workoutViewHolder.MoreOptionsMenu.Visibility = ViewStates.Gone; }; } }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { WorkoutViewHolder workoutHolder = holder as WorkoutViewHolder; workoutHolder.MoreOptionsButton.Visibility = ViewStates.Visible; workoutHolder.MoreOptionsMenu.Visibility = ViewStates.Gone; if (data[position].editMode) { ToggleEditMode(true, workoutHolder, position); } else { ToggleEditMode(false, workoutHolder, position); workoutHolder.Title.Text = data[position].title; workoutHolder.Exercises.Text = data[position].exercises != null && data[position].exercises.Length > 0 ? data[position].exercises : ""; if (!workoutHolder.AddExerciseBtn.HasOnClickListeners) { workoutHolder.AddExerciseBtn.Click += delegate(object senderExercise, EventArgs eExercise) { AddExerciseOnClick(senderExercise, eExercise, workoutHolder.AddExerciseBtn, workoutHolder.ExpandedLayout, position, workoutHolder.Root); }; } ConfigureMoreOptionsMenu(workoutHolder); if (data[position].expanded) { // expand workoutHolder.ExpandedLayout.RemoveAllViews(); workoutHolder.ExpandedLayout.Visibility = ViewStates.Visible; workoutHolder.Exercises.Visibility = ViewStates.Gone; workoutHolder.AddExerciseBtn.Visibility = ViewStates.Visible; // setup widgets for expanded view String[] exercisesList = new String[0]; if (data[position].exercises != null) { exercisesList = data[position].exercises.Split('\n'); for (int i = 0; i < exercisesList.Length; i++) { View exerciseView = LayoutInflater.From(context).Inflate(Resource.Layout.ListItemExercise, null); exerciseView.FindViewById <TextView>(Resource.Id.exercise_name).Text = exercisesList[i]; LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); ll.TopMargin = 8; ll.BottomMargin = 8; ll.LeftMargin = 18; ll.RightMargin = 24; exerciseView.LayoutParameters = ll; workoutHolder.ExpandedLayout.AddView(exerciseView); if (i == 0) { // expand first item exerciseView.FindViewById <LinearLayout>(Resource.Id.layout_set).Visibility = ViewStates.Visible; exerciseView.FindViewById <LinearLayout>(Resource.Id.layout_set_title).Visibility = ViewStates.Visible; exerciseView.FindViewById <Button>(Resource.Id.add_set_btn).Visibility = ViewStates.Visible; } else { exerciseView.FindViewById <LinearLayout>(Resource.Id.layout_set).Visibility = ViewStates.Gone; exerciseView.FindViewById <LinearLayout>(Resource.Id.layout_set_title).Visibility = ViewStates.Gone; exerciseView.FindViewById <Button>(Resource.Id.add_set_btn).Visibility = ViewStates.Gone; } LinearLayout rootExerciseItem = exerciseView.FindViewById <LinearLayout>(Resource.Id.root_exercise_item); Button addSetBtn = exerciseView.FindViewById <Button>(Resource.Id.add_set_btn); if (!rootExerciseItem.HasOnClickListeners) { rootExerciseItem.Click += delegate(object rootSender, EventArgs rootE) { ExerciseItemOnClick(rootSender, rootE); }; } if (!addSetBtn.HasOnClickListeners) { addSetBtn.Click += delegate(object addSetSender, EventArgs addSetE) { ExerciseItemOnClick(addSetSender, addSetE); }; } } } if (workoutHolder.Exercises.Text.Length > 0 && workoutHolder.Exercises.Text.Split('\n').Length < exercisesList.Length) { View exerciseView = LayoutInflater.From(context).Inflate(Resource.Layout.ListItemExercise, null); exerciseView.FindViewById <TextView>(Resource.Id.exercise_name).Text = exercisesList[exercisesList.Length - 1]; LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); ll.TopMargin = 8; ll.BottomMargin = 8; ll.LeftMargin = 24; ll.RightMargin = 24; exerciseView.LayoutParameters = ll; workoutHolder.ExpandedLayout.AddView(exerciseView); } } else { // collapse workoutHolder.ExpandedLayout.Visibility = ViewStates.Gone; workoutHolder.Exercises.Visibility = ViewStates.Visible; workoutHolder.AddExerciseBtn.Visibility = ViewStates.Gone; } } }
public void ShowConfirmDialog(string title, string pos, string neg, int adapterPosition, string newWorkoutName, WorkoutViewHolder workoutHolder) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.SetTitle(title); builder.SetPositiveButton(pos, delegate(object s, DialogClickEventArgs ev) { // save new workout name data[adapterPosition].title = newWorkoutName; data[adapterPosition].editMode = false; data[adapterPosition].expanded = true; HideKeyboard(workoutHolder.NewWorkoutName); NotifyItemChanged(adapterPosition); }); builder.SetNegativeButton(neg, delegate(object s2, DialogClickEventArgs ev2) { data.RemoveAt(adapterPosition); NotifyItemRemoved(adapterPosition); HideKeyboard(workoutHolder.NewWorkoutName); }); builder.Create().Show(); }
private void ToggleEditMode(bool edit, WorkoutViewHolder workoutHolder, int position) { if (edit) { workoutHolder.RootWorkoutLayout.Visibility = ViewStates.Gone; workoutHolder.EditModeRoot.Visibility = ViewStates.Visible; ShowKeyboard(workoutHolder.NewWorkoutName); workoutHolder.NewWorkoutName.FocusChange += new EventHandler <View.FocusChangeEventArgs>((sender, e) => { string newWorkoutName = workoutHolder.NewWorkoutName.Text.ToString(); if (!e.HasFocus && newWorkoutName.Length > 0) { // save new workout name if (position > -1 && data.Count > position) { data[position].title = newWorkoutName; data[position].editMode = false; HideKeyboard(workoutHolder.NewWorkoutName); } } }); workoutHolder.NewWorkoutName.EditorAction += (sender, e) => { if (e.ActionId == ImeAction.Done) { string newWorkoutName = workoutHolder.NewWorkoutName.Text.ToString(); if (newWorkoutName.Length > 0) { // save new workout name data[position].title = newWorkoutName; data[position].editMode = false; data[position].expanded = true; HideKeyboard(workoutHolder.NewWorkoutName); NotifyItemChanged(position); } } else { e.Handled = false; } }; if (!workoutHolder.DeleteWorkoutBtn.HasOnClickListeners) { workoutHolder.DeleteWorkoutBtn.Click += delegate(object senderDeleteWorkout, EventArgs eDeleteWorkout) { if (workoutHolder.NewWorkoutName.Text.ToString().Length > 0) { string newWorkoutName = workoutHolder.NewWorkoutName.Text.ToString(); ShowConfirmDialog(context.GetString(Resource.String.confirm_save_changes), context.GetString(Resource.String.save), context.GetString(Resource.String.dont_save), position, newWorkoutName, workoutHolder); } else { data.RemoveAt(position); NotifyItemRemoved(position); HideKeyboard(workoutHolder.NewWorkoutName); } }; } } else { workoutHolder.EditModeRoot.Visibility = ViewStates.Gone; workoutHolder.RootWorkoutLayout.Visibility = ViewStates.Visible; } }