2017-07-24 1 views
0

behält Ich habe eine Listenansicht von Studenten mit einem Schalter und Kontrollkästchen für jede Zeile Element für Studenten Teilnahme. Ich möchte die Schalterbox und die Kontrollkästchen während des Scrollens beibehalten. Ich habe versucht, auf diese Weise aber war erfolglos:Wie man den Status der Checkbox auf der Scroll von Listview in Android

AttendanceCreateNewAdapter.cs hat Code

public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 

     // re-use an existing view, if one is available 
     // otherwise create a new one 
     if (view == null) 
     { 
      view = activityContext.LayoutInflater.Inflate(Resource.Layout.AttendanceCreatenewRowlistLayout, parent, false); 
      view.SetTag((Int32)position, view); 
     } 


     // initialize size for checkbox and switch box states 
     checkBoxState = new bool[Count]; 
     switchBoxState = new bool[Count]; 

     item = this[position]; 


      view.FindViewById<TextView>(Resource.Id.student_name).Text = item.StudentName; 
      view.FindViewById<TextView>(Resource.Id.date).Text = GetCustomDateTime(item.Date); 
      checkBoxLeave = view.FindViewById<CheckBox>(Resource.Id.on_leave); 
      switchPresentAbsent = view.FindViewById<Switch>(Resource.Id.present_absent_switch); 

      checkBoxLeave.Tag = position; 
      switchPresentAbsent.Tag = position; 


      checkBoxLeave.SetOnCheckedChangeListener(null); 
      switchPresentAbsent.SetOnCheckedChangeListener(null); 

      switchBoxState[position] = item.Present; 
      checkBoxState[position] = item.Leave; 

      checkBoxLeave.Checked = checkBoxState[position]; 
      switchPresentAbsent.Checked = switchBoxState[position]; 

    checkBoxLeave.CheckedChange += delegate (object sender, CompoundButton.CheckedChangeEventArgs e) 
     { 
      CompoundButton buttonView = sender as CompoundButton; 
      if (e.IsChecked) 
      { 

       int itemPosition = (int)buttonView.Tag; 
       UpdateAdapterList(itemPosition, false, true); 

      } 
     }; 
      return view; 
    } 
private void UpdateAdapterList(int myPosition, bool leave, bool present) 
    { 

     NewAttendanceStudent newItem = this[myPosition]; 

     var attendanceTaken = new NewAttendanceStudent 
     { 
      StudentName = newItem.StudentName, 
      SectionId = newItem.SectionId, 
      ClassId = newItem.ClassId, 
      RollNumber = newItem.RollNumber, 
      Leave = leave, 
      Present = present, 
      Date = newItem.Date, 
     }; 
     newAttendanceStudentList.Insert(myPosition,attendanceTaken); 
    } 

danken Ihnen folgenden Teil.

+0

Bitte beachten Sie den Link https://stackoverflow.com/questions/16350670/listview-viewholder-checkbox-state –

Antwort

0

einmal testen Werde kann, in meinem Fall helfen, es hat funktioniert: Implementieren setOnClickListener() -Methode statt setOnCheckedChangeListener()

wie:

checkBoxSelected.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        instrumentClickListener.onCheckBoxClick(instrumentDTO, checkBoxSelected.isChecked(), position); 
        Log.d(TAG, "checked item is check: " + checkBoxSelected.isChecked() + " \nitem: " + position); 
       } 
      }); 
1

Verwenden setOnClickListener für Checkbox und aktualisiert den Zustand der Checkbox globale Daten, die Sie für die Adapterklasse übergeben hätten, und rufen Sie notifyDataSetChanged(); nach setOnClickListener. Verwenden Sie die Kontrollkästchen Daten, um den Status des Kontrollkästchens in getView.

// initialized in the getView 

    if (globalData.get(position).getCheckbox().equalsIgnoreCase("1")) { 
      holder.checkbox.setChecked(true); 
    } else { 
      holder.checkbox.setChecked(false); 
    } 

//checkbox clickelistener 
holder.checkbox.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        final GlobalData clk_row = items.get(position); 
         if (Integer.parseInt(clk_row.getCheckbox()) == 0) { 

           globalData.get(position).setCheckbox("1"); 

         } else { 

           globalData.get(position).setCheckbox("0"); 

         } 


        notifyDataSetChanged(); 
       } 

      }); 
Verwandte Themen