2017-04-21 135 views
-1

我在每個項目中都有一個帶有複選框的列表視圖,當我單擊我的複選框時,我需要在列表視圖中選中所有複選框checkbox_all沒有任何事情發生,這是我的代碼,不知道爲什麼它不工作。已選中所有複選框android listview

enter image description here

checkbox_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
       for(int i = 0; i < list_view_themes.getAdapter().getCount(); i++){ 



LinearLayout itemLayout = (LinearLayout)list_view_themes.getAdapter().getView(i, null, list_view_themes); 

        if(itemLayout != null) 
        { 
         CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.checkbox_item); 
         cb.setChecked(b); 
         ((BaseAdapter) list_view_themes.getAdapter()).notifyDataSetChanged(); 
        } 
       } 

      } 
     }); 

這是我的適配器:

public class ConformityAdapter extends BaseAdapter { 

private MainActivity mainActivity; 

private List<Theme> themes; 

public ConformityAdapter(MainActivity mainActivity, List<Theme> themes) { 
    this.mainActivity = mainActivity; 
    this.themes = themes; 
} 

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

@Override 
public Object getItem(int i) { 
    return themes.get(i); 
} 

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

@Override 
public View getView(final int i, View convertView, ViewGroup viewGroup) { 

    final ViewHolder holder; 

    if (convertView == null) { 

     holder = new ViewHolder(); 
     LayoutInflater inflater = mainActivity.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.listview_item, null); 

     holder.text_title = (TextView) convertView.findViewById(R.id.text_title); 
     holder.text_info= (ImageView) convertView.findViewById(R.id.info); 
     holder.text_label = (TextView) convertView.findViewById(R.id.text_label); 
     holder.text_message = (TextView) convertView.findViewById(R.id.text_message); 
     holder.image_circle= (ImageView) convertView.findViewById(R.id.image_circle); 
     holder.checkBox= (CheckBox) convertView.findViewById(R.id.checkbox_item); 
     holder.line_listview_item = (View) convertView.findViewById(R.id.line_listview_item); 
     holder.star_empty = (ImageView) convertView.findViewById(R.id.star_empty); 


     convertView.setTag(holder); 

    } else { 

     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.text_info.setVisibility(View.INVISIBLE); 
    holder.text_label.setVisibility(View.GONE); 
    holder.image_circle.setVisibility(View.GONE); 
    holder.star_empty.setVisibility(View.GONE); 
    holder.line_listview_item.setVisibility(View.INVISIBLE); 
    holder.text_message.setPadding((int) Utils.dpToPixels(mainActivity, 20F),0,0,0); 
    holder.text_title.setPadding((int) Utils.dpToPixels(mainActivity, 20F),0,0,0); 

    holder.checkBox.setVisibility(View.VISIBLE); 
    holder.text_title.setText(themes.get(i).getTitle()); 
    holder.text_label.setText("T"); 

    holder.text_message.setText(themes.get(i).getQuestions().size()+" Questions"); 
    holder.image_circle.setColorFilter(setColorFilter()); 

    convertView.findViewById(R.id.item).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      ConformityFragment c = new ConformityFragment(); 
      final int [] ids = new int[1]; 
      ids[0] = themes.get(i).getId(); 
      Bundle b = new Bundle(); 
      b.putIntArray("ids", ids); 
      c.setArguments(b); 
      ((MyApplication) mainActivity.getApplication()).setFragment(mainActivity,c, R.id.fragment_container); 

     } 
    }); 

    return convertView; 
} 
class ViewHolder { 
    TextView text_title; 
    TextView text_label; 
    TextView text_message; 
    ImageView text_info; 
    ImageView image_circle; 
    ImageView star_empty; 
    CheckBox checkBox; 
    View line_listview_item; 


} 
private int setColorFilter(){ 
    return ContextCompat.getColor(mainActivity, R.color.three_round); 
} 

}

+1

您需要添加布爾在您的數據模型檢查所有的複選框 –

+0

紈絝子弟,我有**布爾b ** – Euphor08

+0

後整個代碼。你在那裏設置布爾值 –

回答

0

這就是答案:

checkbox_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
        list_view_themes.setAdapter(new ConformityAdapter((MainActivity) getActivity(), themes, b)); 
        ((BaseAdapter) list_view_themes.getAdapter()).notifyDataSetChanged(); 

       } 
      }); 
在我的適配器

我添加了一個新的構造和新行

public ConformityAdapter(MainActivity mainActivity, List<Theme> themes, boolean b) { 
     this.mainActivity = mainActivity; 
     this.themes = themes; 
     this.b = b; 
    } 

新線

holder.checkBox.setChecked(b);