2011-01-06 20 views
1

フレンド、カスタムリストアダプタのすべてのチェックボックスをプログラムで選択する方法

私は以下のカスタムアダプターを使用して、リストビューでテキストビューとチェクボックスを表示しています。 今すぐtextviewがselectAllであれば、リスト内のそれの前にあるchecboxをクリックします。リスト内のすべてのチェックボックスを選択する必要があります。私のケースではselectallチェックボックスは "0"の位置にあります。

私はすべてのチェックボックス配列を取得して、選択または選択解除できるようにする方法を教えてください。 ご協力いただければ幸いです。

public class EfficientAdapter extends BaseAdapter implements 
     Filterable { 
    private LayoutInflater mInflater; 
    //private Context context; 
    List<DalCategories> obj; 

    public EfficientAdapter(Context context,List<DalCategories> value) { 

     mInflater = LayoutInflater.from(context); 
     obj = value; 
     //this.context = context; 
    } 

    public View getView(final int position, View convertView, 
     final ViewGroup parent) { 
     ViewHolder holder; 

     convertView = mInflater.inflate(R.layout.list_category_item, null); 

     holder = new ViewHolder(); 
     holder.TextTitle = (TextView) convertView.findViewById(R.id.list_item_title); 
     holder.checkBoxes = (CheckBox) convertView.findViewById(R.id.chkSubCategory); 


     if(obj.get(position).isIs_Selected()) 
     { 
      holder.checkBoxes.setChecked(true); 
     } 


     holder.checkBoxes 
     .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(
        CompoundButton buttonView, boolean isChecked) { 

       if(select_all == true) 
{    
       // select all here........ 


}     


      } 
     }); 

     convertView.setTag(holder); 


     holder.TextTitle.setText(obj.get(position).getTitle()); 



     return convertView; 
    } 

    class ViewHolder 
    { 
     public TextView TextTitle; 
     public CheckBox checkBoxes; 
    } 

    @Override 
    public Filter getFilter() { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public int getCount() { 
     return obj.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return obj.get(position); 
    } 

    }`enter code here` 

答えて

1

あなたの主な質問に答えるには、格納されたデータ(List obj)を反復して値をtrueに設定し、notifyDataSetChanged()を呼び出します。

しかし、あなたが取り組まなければならないEfficientAdapter(多少皮肉な名前の)EfficientAdapterには多くの問題があります。

最初に、ViewHolderパターンを使用していますが、convertView引数を無視して毎回新しいビューを作成するため、ここではまったく役に立たないです。ビューが再利用されることはないので、ビューの所有者はあなたのために何もしません。 convertViewがnullの場合にのみ、新しいビューを展開してください。

第2に、最初のアイテムがクリックされたときにアクションをクリックするだけのようですが、すべてのアイテムにハンドラーを作成して設定しているようです。事実上ノーオペレーションのイベントハンドラをあなたの要素のうちの1つを除くすべての要素に取り付けるのではなく、そのチェックを外側に移動するだけで、コードをより効率的にすることができます。

私は強くは、Google I/Oからのリストビューでこの動画を行くお勧め:http://developer.android.com/videos/index.html#

0

チェックボックスの状態を保存するには、グローバルブール配列が必要です。

は、この配列のonCreate外()メソッド

private boolean[] itemToggled; 

を宣言し、その後、あなたは、アダプタ内にこれを持つことができます

itemToggled = new boolean[Checkbox.length]; 
int i; 
     for(i=0;i<Checkbox.length;i++) 
     { 
      itemToggled[i]=false; 
     } 

以下のようにのonCreate()メソッド内でそれを初期化。

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
if(select_all == true) 
{    
       // select all here........ 
     int i; 
     for(i=0;i<Checkbox.length;i++) 
     { 
      itemToggled[i]=true; 
     } 

}  

チェックボックスの処理には、この配列の値を使用します。

0
selectAllButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) 
     { 
      Log.i("Children Count",""+myListView.getCount()+"Items from MyList Checked"); 
       for(int i=0;i<myListView.getCount();i++) 
       { 
        myListView.setItemChecked(i,true); 
       } 
     } 
    }); 

楽しみ、androiding保つ...

関連する問題