2016-12-13 3 views
0

Ich entwickle eine Android-App, in der es eine benutzerdefinierte Listenansicht mit Textansicht und Kontrollkästchen gibt. In dieser Listenansicht wird die Kontaktliste von Mobilgeräten angezeigt, jetzt muss ich ein Kontrollkästchen für alle auswählen, und wenn es aktiviert ist, müssen alle Kontrollkästchen von conatcts ausgewählt werden. Ich habe Code dafür geschrieben, aber was passiert ist, wenn ich das Kontrollkästchen Alle auswählen wähle ... die aktuelle Ansicht von Kontakten wird ausgewählt und die Kontakte in der unteren Bildansicht werden nicht ausgewählt. Ich gebe den Code unten, bitte überprüfen Sie es und helfen Sie mir, die Änderungen vorzunehmen.Android checkbox alle auswählen nicht alle childs auswählen

 lv = (ListView) findViewById(R.id.contactsView); 
     ma = new MyAdapter(); 
     lv.setAdapter(ma); 
     lv.setOnItemClickListener(this); 
     lv.setItemsCanFocus(false); 
     lv.setTextFilterEnabled(true); 
switch(view.getId()) { 
     case R.id.chkSelectAll: 
      if (checked) 
      { 
       Toast.makeText(MyList.this, "Checked.", Toast.LENGTH_LONG).show(); 
       for(int i=0; i<lv.getChildCount();i++) 

       { 
        CheckBox cb = (CheckBox)lv.getChildAt(i).findViewById(R.id.selected); 
        cb.setChecked(true); 
       } 
      } 

      else 
      { 
       Toast.makeText(MyList.this, "Not Checked.this time", Toast.LENGTH_LONG).show(); 
       for(int i=0; i<lv.getChildCount();i++) 
       { 
        CheckBox cb = (CheckBox)lv.getChildAt(i).findViewById(R.id.selected); 
        cb.setChecked(false); 
       } 
      } 
      break; 

    } 
    } 
+0

was ist lv ??? füge bitte den richtigen Code hinzu – Pavya

+0

Bitte check..edited – roshanpeter

+0

versuche, boolean für das zu setzen –

Antwort

0

auf diese Weise versuchen dies ist genau das, was Sie

import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.SparseBooleanArray; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 

public class MainActivity extends ListActivity { 

    /** String array used as the datasource for the ArrayAdapter of the listview **/ 
    String[] countries = new String[] { 
     "India", 
     "Pakistan", 
     "Sri Lanka", 
     "Bangladesh", 
     "China", 
     "Afghanistan" 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     /** Defining array adapter to store items for the listview **/ 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, countries); 

     /** Setting the arrayadapter for this listview **/ 
     getListView().setAdapter(adapter); 

     /** Defining checkbox click event listener **/ 
     OnClickListener clickListener = new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       CheckBox chk = (CheckBox) v; 
       int itemCount = getListView().getCount(); 
       for(int i=0 ; i < itemCount ; i++){ 
        getListView().setItemChecked(i, chk.isChecked()); 
       } 
      } 
     }; 

     /** Defining click event listener for the listitem checkbox */ 
     OnItemClickListener itemClickListener = new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      CheckBox chk = (CheckBox) findViewById(R.id.chkAll); 
      int checkedItemCount = getCheckedItemCount(); 

      if(getListView().getCount()==checkedItemCount) 
       chk.setChecked(true); 
      else 
       chk.setChecked(false); 
      } 
     }; 

     /** Getting reference to checkbox available in the main.xml layout */ 
     CheckBox chkAll = (CheckBox) findViewById(R.id.chkAll); 

     /** Setting a click listener for the checkbox **/ 
     chkAll.setOnClickListener(clickListener); 

     /** Setting a click listener for the listitem checkbox **/ 
     getListView().setOnItemClickListener(itemClickListener); 

    } 

    /** 
    * 
    * Returns the number of checked items 
    */ 
    private int getCheckedItemCount(){ 
     int cnt = 0; 
     SparseBooleanArray positions = getListView().getCheckedItemPositions(); 
     int itemCount = getListView().getCount(); 

     for(int i=0;i<itemCount;i++){ 
      if(positions.get(i)) 
       cnt++; 
     } 
    return cnt; 
    } 
} 

gesucht Dazu mehr sehen http://wptrafficanalyzer.in/blog/implementing-checkall-and-uncheckall-for-a-listview-in-android/

http://aboutyusata.blogspot.in/2013/11/how-to-make-listview-with-checkbox-in.html

0

Sie nicht die Kontrollkästchen über überprüfen "getChildAt (i)" weil das ListView nur die Zeilen darstellt, die auf dem Bildschirm sind.

Sie müssen die Adapter machen die Arbeit:

In MyAdapter so etwas wie hinzufügen:

public void selectAll() { 
    for (Contact c : this.contacts) { 
     c.setSelected(true); 
    } 
    this.notifyDataSetChanged(); 
} 

ich jetzt nicht tun, wie Sie Datenmodell strukturiert sind, aber ich hoffe, dass diese Ihnen das Recht geben Richtung.

Verwandte Themen