2016-03-28 19 views
1

Ich habe eine ListView mit einer CheckBox und eine EditText. Ich möchte den Namen und EditText Wert der überprüften CheckBoxes auf einem Button klicken. Wie kann ich das machen?Wie erhalten Sie ListView-Elemente beim Klicken auf die Schaltfläche?

Mein getView() -Methode:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.scrap_list_row_item, parent, false); 
     final EditText kg = (EditText) convertView.findViewById(R.id.editText1); 
     final CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     final TextView txtKg = (TextView) convertView.findViewById(R.id.textView1); 
     final float scale = context.getResources().getDisplayMetrics().density; 
     cb.setPadding(cb.getPaddingLeft() + (int)(10.0f * scale + 0.5f), 
       cb.getPaddingTop(), 
       cb.getPaddingRight(), 
       cb.getPaddingBottom()); 
     //cb.setText(modelItems[position].getName()); 
     cb.setText(arrayScrapItems.get(position).getItemName()); 

     cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        if(isChecked) 
        { 
         // Toast.makeText(context, "You checked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background_active); 
         kg.setBackgroundResource((R.drawable.kg_box)); 
         txtKg.setTextColor(Color.parseColor("#000000")); 
         kg.setFocusable(true); 
         kg.setEnabled(true); 
        } 
        else 
        { 
         //Toast.makeText(context, "You unchecked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background); 
         kg.setBackgroundResource((R.drawable.kg_box_inactive)); 
         txtKg.setTextColor(Color.parseColor("#D3D3D3")); 
         kg.setFocusable(false); 
         kg.setEnabled(false); 
        } 
       } 
      } 
     ); 

     return convertView; 
+0

Es gibt so viele Tutorials für Kontrollkästchen mit ListView – Piyush

Antwort

0

Wie Listview es Ansichten rezykliert Sie können nicht am Ereignis der Schaltfläche gehen klicken Sie sich durch alle Listenelemente und sehen, ob sie aktiviert sind oder nicht, weil es nur sind So viele Ansichten wie Zeilen sind in Ihrer Liste sichtbar. Z.B. Wenn Sie eine Liste mit 1000 Zeilen haben und 20 davon gleichzeitig auf dem Bildschirm angezeigt werden können, hat Ihr ListView nur 20 Ansichten (dh 20 CheckBoxes und 20 EditTexts) und es ist Ihre ListAdapter-Implementierung, diese mit den korrekten Daten zu füllen einer der 1000 Zeilen, abhängig davon, wie weit der Benutzer die Liste gescrollt hat.

Daher müssen Sie die überprüften Zeilen und ihre Texte in einer Art Offscreen-Modell verfolgen.

Und wenn Sie alle diese Informationen in einem Modell haben, können Sie leicht darauf zugreifen, die genannte Schaltfläche wird angeklickt.

Also, zuerst müssen Sie Ihren Code so ändern, dass Sie nur eine neue Ansicht erstellen, wenn convertView null ist. Wenn es nicht null ist, aktualisieren Sie einfach die Zustände von View auf den Status der Zeile unter der gegebenen position. Dieser Status sollte von Ihrem Offscreen-Modell stammen.

Hoffe, diese Antwort bringt Sie auf den richtigen Weg, in jedem Fall sollten Sie sich mit der Art, wie ListViews Ansichten recyceln, vertraut machen.

Verwandte Themen