2011-07-20 283 views
3

我有一個適配器,帶有一個imageview,一個textView和一個複選框以及一個用於選擇所有複選框的「全選」按鈕。我搜索了很多關於如何做到這一點(選擇所有複選框),但它沒有奏效。任何人都可以解釋我應該怎麼做?請...我必須這樣做緊急如何選擇/取消選擇所有複選框?

這裏是我的適配器:

Public class LazyAdapter1 extends BaseAdapter { 

     private Activity activity; 
     private String[] data; 
     private String[] nume; 
     private LayoutInflater inflater=null; 
     public ImageLoader imageLoader; 

     public LazyAdapter1(Activity a, String[] d, String[] f) { 
      activity = a; 
      data=d; 
      nume=f; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      imageLoader=new ImageLoader(activity.getApplicationContext()); 
     } 

     public int getCount() { 
      return data.length; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public class ViewHolder{ 
      public TextView text; 
      public ImageView image; 
      public CheckBox ck; 
     } 



     public View getView(int position, View convertView, ViewGroup parent) { 
      View vi=convertView; 
      ViewHolder holder; 
      if(convertView==null){ 
       vi = inflater.inflate(R.layout.item, null); 
       holder=new ViewHolder(); 
       holder.text=(TextView)vi.findViewById(R.id.text);; 
       holder.image=(ImageView)vi.findViewById(R.id.image); 
       holder.ck=(CheckBox)vi.findViewById(R.id.chkbox); 
       vi.setTag(holder); 
      } 
      else 
       holder=(ViewHolder)vi.getTag(); 

      holder.text.setText(nume[position]); 
      holder.image.setTag(data[position]); 
      imageLoader.DisplayImage(data[position], activity, holder.image); 
      return vi; 
     } 
    } 

在此先感謝。

回答

5
boolean flag = true; 

現在這個按鈕,點擊 交換標誌的值

flag = !flag; 
adapter.notifydatasetchanged(); 

現在,在您getView方法

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    ViewHolder holder; 
    if (convertView == null) { 
     vi = inflater.inflate(R.layout.item, null); 
     holder = new ViewHolder(); 
     holder.text = (TextView) vi.findViewById(R.id.text); 
     holder.image = (ImageView) vi.findViewById(R.id.image); 
     holder.ck = (CheckBox) vi.findViewById(R.id.chkbox); 
     vi.setTag(holder); 
    } else { 
     holder = (ViewHolder) vi.getTag(); 
    } 
    holder.ck.setChecked(flag); 
    holder.text.setText(nume[position]); 
    holder.image.setTag(data[position]); 
    imageLoader.DisplayImage(data[position], activity, holder.image); 
    return vi; 
} 
+1

謝謝......它的工作原理:)...仍然存在一個小問題:當我選擇按鈕「全選」時,複選框被選中,但我只能在滾動所有列表後才能看到它們,因爲項目來自當我選擇按鈕時,第一個視圖不會被選中。應該是什麼問題? – Gabrielle

+0

現在看到更新的代碼 –

1

這將讓你列表視圖所有的意見,並會得到每個視圖的複選框,將其設爲檢查:

List<View> listOfViews = new ArrayList<View>(); 
listView1.reclaimViews(listOfViews); 
for (View v : listOfViews) 
{ 
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkbox); 
    cb.setChecked(true); 
} 

UPDATE:

之前初始化適配器,創建包含所有複選框的checkstates的數組列表。然後此ArrayList作爲參數傳遞給您的自定義適配器和getView使用()函數(checkStates是在下面的代碼中的數組列表):

public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 
     if(convertView==null){ 
      vi = inflater.inflate(R.layout.item, null); 
      holder=new ViewHolder(); 
      holder.text=(TextView)vi.findViewById(R.id.text);; 
      holder.image=(ImageView)vi.findViewById(R.id.image); 
      CheckBox checkbox = (CheckBox)vi.findViewById(R.id.chkbox); 
      checkbox.setChecked(checkStates.get(position); 
      holder.ck= checkbox; 
      vi.setTag(holder); 
     } 
     else 
      holder=(ViewHolder)vi.getTag(); 

     holder.text.setText(nume[position]); 
     holder.image.setTag(data[position]); 
     holder.ck.setChecked(checkStates.get(position)); 
     imageLoader.DisplayImage(data[position], activity, holder.image); 
     return vi; 
    } 

然後,當你要檢查所有的複選框,設置所有包含複選框checkstates的arraylist中的值爲true。然後調用listView1.setAdapter(adapter);

+0

在我身上沒有任何反應與此.. – Gabrielle

+0

看看更新。 –

0

我asigned一個ID,每個選定的項目,然後使用HashMap跟蹤所選項目

相關問題