2016-12-13 2 views
0

Я разрабатываю приложение для Android, в котором есть пользовательский вид списка с текстовым представлением и флажок. В этом списке контактов список контактов будет отображаться, теперь мне нужно добавить флажок «Выбрать все», и когда он будет установлен, все флажки для конатов должны быть выбраны. Я написал код для этого, но что происходит, когда я выбираю флажок select all ... текущий вид контактов получает selcting, а контакты в нижнем scrollview не выбираются. Я даю код ниже, пожалуйста, проверьте его и помогите мне сделать изменения.Android checkbox select all not select all childs

 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

Что такое lv ??? добавьте правильный код – Pavya

+0

Пожалуйста, проверьте..edited – roshanpeter

+0

попробуйте установить boolean для этого –

ответ

0

Попробуйте так это именно то, что вы ищете

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; 
    } 
} 

Для более увидеть это 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

Вы не можете проверить флажков с помощью "getChildAt (I)" потому что ListView только отображает строки, которые находятся на экране.

Вам нужно сделать адаптер сделать работу:

В MyAdapter добавить что-то вроде:

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

не знаю я теперь, как вы DataModel структурирован, но я надеюсь, что это даст вам право направление.