2016-07-06 11 views
-1

Ich war nach dem Tutorial here eine Liste von Kontrollkästchen zu machen, und mein Adapter sieht wie folgt aus:Android Listview-Recycle-Mechanismus

private class ViewHolder{ 
    CheckBox name; 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 

    ViewHolder holder = null; 
    LayoutInflater settingInflater = LayoutInflater.from(getContext()); 
    if (convertView == null) { 
     convertView = settingInflater.inflate(R.layout.custom_row, parent, false); 
     holder = new ViewHolder(); 
     holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     convertView.setTag(holder); 

     holder.name.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       CheckBox cb = (CheckBox) v; 
       CustomCheckbox theCheckbox = (CustomCheckbox) cb.getTag(); 
       Toast.makeText(getContext(), 
         "Clicked on Checkbox: " + cb.getText(), 
         Toast.LENGTH_SHORT).show(); 
       Log.e(TAG,Integer.toString(position)); 

     }); 
    }else{ 
     holder = (ViewHolder)convertView.getTag(); 
    } 

} 

Es gibt etwa 15 Einträge auf meinem Bildschirm, wenn ich diese Ansicht begonnen, aber wenn Ich scrolle nach unten und wähle die 16. Checkbox, ihre Position geht wieder auf Null zurück, und die folgenden Einträge werden dementsprechend zu 1, 2, 3 .... usw. Wie implementiere ich den Halter, damit ich für jeden die richtige Positionsnummer bekommen kann Kontrollkästchen?

Danke !!

+1

Sie die Positionen von Einsen müssen halten haben, die in einem überprüft wurden Liste – tyczj

Antwort

0

Listview-Recycling-Ansicht in der Tat Sie definieren nur Klick-Listener, wenn die Ansicht nicht so recycelt wird, wenn Sie klicken Sie auf „alte“ Hörer noch aktiv

if (convertView == null) { 
     //here you have new view 
     convertView = settingInflater.inflate(R.layout.custom_row, parent, false); 
     holder = new ViewHolder(); 
     holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     convertView.setTag(holder); 
    }else{ 
     //here you get recycled view 
     holder = (ViewHolder)convertView.getTag(); 
    } 
    //you should put you code here after you retrieve your view (either new or recycled) 
    holder.name.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox cb = (CheckBox) v; 
      CustomCheckbox theCheckbox = (CustomCheckbox) cb.getTag(); 
      Toast.makeText(getContext(), 
        "Clicked on Checkbox: " + cb.getText(), 
        Toast.LENGTH_SHORT).show(); 
      Log.e(TAG,Integer.toString(position)); 

    }); 
Verwandte Themen