2017-06-13 5 views
0

Ich habe Code, der ListViews programmatisch hinzufügt und Schaltflächen für jede Listenansicht erstellt, um neue Elemente für die Listenansichten zu erstellen. Jedes Element verfügt über ein Klickereignis, das ein Dialogfeldfragment mit einer Löschschaltfläche anzeigt. Es funktioniert, aber für den "Monday" Adapter, zeigt es 2 Dialogfragmente, und Dienstag nur einen, so dass Dienstag korrekt funktioniert. Werfen Sie einen Blick:Warum werden 2 Dialogfragmente angezeigt?

private void InitializeExercisesForDay(string day, View view) 
    { 
     /* 
     * Basic start 
     * */ 

     LinearLayout layout = view.FindViewById<LinearLayout>(Resource.Id.linearLayoutCreatePlan); 

     TextView text = new TextView(Activity); 
     text.SetTextColor(Resources.GetColor(Resource.Color.lightGreen)); 
     text.Text = day; 
     layout.AddView(text); 

     Button buttonAddExercise = new Button(Activity) 
     { 
      Text = "Add Exercise" 
     }; 
     layout.AddView(buttonAddExercise); 

     /* 
     * Basic End */ 


     switch (day) 
     { 
      case "Monday": 

       ListViewMonday = new ListView(Activity); 
       MondayExerciseList = new List<Exercise>();      
       MondayAdapter = new Adapters.Exercise(Activity, MondayExerciseList); 
       ListViewMonday.Adapter = MondayAdapter; 
       layout.AddView(ListViewMonday);     
       break; 
      case "Tuesday": 
       ListViewTuesday = new ListView(Activity); 
       TuesdayExerciseList = new List<Exercise>(); 
       TuesdayAdapter = new Adapters.Exercise(Activity, TuesdayExerciseList); 
       ListViewTuesday.Adapter = TuesdayAdapter; 
       layout.AddView(ListViewTuesday); 
       break; 
     } 

     buttonAddExercise.Click += delegate 
     { 
      FragmentTransaction transaction = Activity.FragmentManager.BeginTransaction(); 
      Helpers.DialogViewExercises dialog = new Helpers.DialogViewExercises(Activity); 
      dialog.Show(transaction, "dialog"); 
      dialog.OnExerciseSelected += (o, e) => 
      { 
       var exercise = e.Exercise; 

       switch (day) 
       { 
        case "Monday": 
         MondayExerciseList.Add(exercise); 
         MondayAdapter = new Adapters.Exercise(Activity, MondayExerciseList); 
         Activity.RunOnUiThread(() => { MondayAdapter.NotifyDataSetChanged(); }); 
         ListViewMonday.Adapter = MondayAdapter; 
         if (ListViewMonday != null) 
         { 
          var parameters = GetListViewParameters(ListViewMonday, MondayAdapter); 
          ListViewMonday.LayoutParameters = parameters; 
         } 


         break; 

        case "Tuesday": 
         TuesdayExerciseList.Add(exercise); 
         TuesdayAdapter = new Adapters.Exercise(Activity, TuesdayExerciseList); 
         Activity.RunOnUiThread(() => { TuesdayAdapter.NotifyDataSetChanged(); }); 
         ListViewTuesday.Adapter = TuesdayAdapter; 
         if (ListViewTuesday != null) 
         { 
          var parameters = GetListViewParameters(ListViewTuesday, TuesdayAdapter); 
          ListViewTuesday.LayoutParameters = parameters; 
         } 


         break; 
       } 
      }; 
     }; 

     if (ListViewMonday != null) 
     { 
      ListViewMonday.ItemClick += ListViewMonday_ItemClick; 
      return; 
     } 

     if (ListViewTuesday != null) 
     { 
      ListViewTuesday.ItemClick += ListViewTuesday_ItemClick; 
      return; 
     } 

    } 

    private void ListViewTuesday_ItemClick(object sender, AdapterView.ItemClickEventArgs e) 
    { 
     var exercise = TuesdayExerciseList[e.Position]; 

     FragmentTransaction transaction = Activity.FragmentManager.BeginTransaction(); 
     Helpers.DialogViewExerciseInPlan dialog = new Helpers.DialogViewExerciseInPlan(exercise); 
     dialog.Show(transaction, "dialog"); 
     dialog.OnDelete += delegate 
     { 
      TuesdayExerciseList.Remove(exercise); 
      TuesdayAdapter = new Adapters.Exercise(Activity, TuesdayExerciseList); 
      Activity.RunOnUiThread(() => { TuesdayAdapter.NotifyDataSetChanged(); }); 
      ListViewTuesday.Adapter = TuesdayAdapter; 
      if (ListViewTuesday != null) 
      { 
       var parameters = GetListViewParameters(ListViewTuesday, TuesdayAdapter); 
       ListViewTuesday.LayoutParameters = parameters; 
      } 
     }; 
    } 

    private void ListViewMonday_ItemClick(object sender, AdapterView.ItemClickEventArgs e) 
    { 
     var exercise = MondayExerciseList[e.Position]; 

     FragmentTransaction transaction = Activity.FragmentManager.BeginTransaction(); 
     Helpers.DialogViewExerciseInPlan dialog = new Helpers.DialogViewExerciseInPlan(exercise); 
     dialog.Show(transaction, "dialog"); 
     dialog.OnDelete += delegate 
     { 
      MondayExerciseList.Remove(exercise); 
      MondayAdapter = new Adapters.Exercise(Activity, MondayExerciseList); 
      Activity.RunOnUiThread(() => { MondayAdapter.NotifyDataSetChanged(); }); 
      ListViewMonday.Adapter = MondayAdapter; 
      if (ListViewMonday != null) 
      { 
       var parameters = GetListViewParameters(ListViewMonday, MondayAdapter); 
       ListViewMonday.LayoutParameters = parameters; 
      } 
     }; 
    } 

Antwort

0

Ich habe es herausgefunden. Das Click-Ereignis musste innerhalb der switch-Anweisung sein, aber ich weiß nicht warum. Weiss es jemand?

 switch (day) 
     { 
      case "Monday":     
       ListViewMonday = new ListView(Activity); 
       MondayExerciseList = new List<Exercise>();      
       MondayAdapter = new Adapters.Exercise(Activity, MondayExerciseList); 
       ListViewMonday.Adapter = MondayAdapter; 
       layout.AddView(ListViewMonday); 
       ListViewMonday.ItemClick += ListViewMonday_ItemClick; 
       break; 
      case "Tuesday": 
       ListViewTuesday = new ListView(Activity); 
       TuesdayExerciseList = new List<Exercise>(); 
       TuesdayAdapter = new Adapters.Exercise(Activity, TuesdayExerciseList); 
       ListViewTuesday.Adapter = TuesdayAdapter; 
       layout.AddView(ListViewTuesday); 
       ListViewTuesday.ItemClick += ListViewTuesday_ItemClick; 
       break; 
      case "Wednesday": 
       ListViewWednesday = new ListView(Activity); 
       WednesdayExerciseList = new List<Exercise>(); 
       WednesdayAdapter = new Adapters.Exercise(Activity, WednesdayExerciseList); 
       ListViewWednesday.Adapter = WednesdayAdapter; 
       layout.AddView(ListViewWednesday); 
       ListViewWednesday.ItemClick += ListViewWednesday_ItemClick; 
       break; 

     } 
Verwandte Themen