2016-07-05 16 views
0

我的代碼被設計爲在listview中有一個單一項目的兩個複選框,問題是當我點擊第一個複選框時,另一個複選框被自動點擊,我取消選中其中一個,另一個自動取消選中單個項目調用位置的兩個複選框

我認爲問題在於兩個複選框獲取該項目的位置,因此它們具有相同的位置,我需要每個複選框都有它自己的複選框位置

@Override public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder=null; 
    View itemView = convertView; 
    if (itemView == null){ 
     LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.item, null); 
     holder = new ViewHolder(); 
     holder.textView1 = (TextView) itemView.findViewById(R.id.textView1); 
     holder.check1 = (CheckBox) itemView.findViewById(R.id.check1); 
     holder.check2 = (CheckBox) itemView.findViewById(R.id.check2); 
     itemView.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder) itemView.getTag(); 
    } 
    holder.check1.setTag(position); 
    final Item item = items.get(position); 
    holder.textView1.setText(item.getName()); 
    holder.check1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
       if(buttonView.isPressed()){ 
        if (position != ListView.INVALID_POSITION) { 
         Item p = items.get(position); 
         p.setSelected(isChecked); 
        } 
       } 
      } 
    } 
); 
holder.check2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      if(buttonView.isPressed()){ 
       if (position != ListView.INVALID_POSITION) { 
         Item p = items.get(position); 
         p.setSelected(isChecked); 
       } 
      } 
     } 
    } 
    ); 
    holder.check1.setChecked(item.isSelected()); 
    holder.check2.setChecked(item.isSelected()); 
    return itemView; 
} 
}private static class ViewHolder { 
public TextView textView1; 
public CheckBox check2,check1; 
}} 

回答

0

原因是check1check2使用相同的值

holder.check1.setChecked(item.isSelected()); 
holder.check2.setChecked(item.isSelected()); 

因此,在Item類,你應該聲明2變量(如isSelectedCheck1和isSelectedCheck2)爲節省2複選框的狀態

+0

太感謝你了,它的工作原理 –

相關問題