2012-07-19 61 views
0

我正在開發一個ListView的Android應用程序。此ListView中的每件商品都有一個checkbox如何僅選擇一個ListView中選中的一個複選框

我試圖取消選中每個項目,當用戶點擊其中之一。例如。具有兩個項目的ListView0,1

此時0被選中,用戶點擊第1項我想取消項目0

這是我的代碼。它在ArrayAdapter之內。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    if (row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(itemLayoutId, parent, false); 
    } 

    Gate gate = gates.get(position); 
    if (gate != null) 
    { 
     TextView itemText = (TextView)row.findViewById(R.id.gateNameText); 
     if (itemText != null) 
      itemText.setText(gate.getName()); 

     ImageView imageView = 
       (ImageView)row.findViewById(R.id.gateTypeImage); 
     int resId; 

     switch (gate.getSelTypeOperation()) 
     { 
      case 0: 
       resId = R.drawable.garage; 
       break; 
      case 1: 
       resId = R.drawable.pulse; 
       break; 
      case 2: 
       resId = R.drawable.onoff; 
       break; 
      default: 
       resId = R.drawable.garage; 
       break; 
     } 
     imageView.setImageResource(resId); 

     CheckBox checkBox = 
       (CheckBox)row.findViewById(R.id.gateSelectedCheck); 
     if (checkBox != null) 
     { 
      checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
      { 
       public void onCheckedChanged(CompoundButton buttonView, 
         boolean isChecked) 
       { 
        // Solo hago algo si el nuevo estado es marcado. 
        if (isChecked) 
         for(int i = 0; i < gates.size(); i++) 
         { 
          if (i != position) 
          { 
           Log.v("GatesAdapter", "uncheck: " + position); 
           View view = getView(i, null, null); 
           CheckBox checkBox = 
             (CheckBox)view.findViewById(R.id.gateSelectedCheck); 
           checkBox.setChecked(false); 
          } 
         } 
       } 
      }); 
      checkBox.setChecked(selectedGateIndex == position); 
     } 
    } 

    return row; 
} 

但是,它不起作用。

我在做什麼錯?

+0

我認爲這是更好,如果ü在這種情況下使用單選按鈕。 – pixelscreen 2012-07-19 11:42:03

+0

我可以在ListView中使用RadioButtonGroup嗎? – VansFannel 2012-07-19 11:43:02

+0

默認編號。檢查我的答案 – pixelscreen 2012-07-19 11:45:26

回答

1

您需要使用listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE),並且需要使您的自定義視圖的行實現可檢查。 。另一個SO問題已經 - soln是here

+1

其實這是一個可能的重複http://stackoverflow.com/q/7329856/735675 – pixelscreen 2012-07-19 11:49:00

0

使用單選按鈕。如果我看到複選框,我想我可以根據需要選擇多少個。

如果您只是用代碼中的RadioButton代替CheckBox對象,是不是解決了您的問題?

1

只要改變你的getview()方法如下圖所示:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     final Holder holder; 
     if (vi == null) { 
      vi = inflater.inflate(R.layout.raw_customelabel_list, null); 
      holder = new Holder(); 

      holder.txtname = (TextView) vi 
        .findViewById(R.id.raw_customlabel_txt_name); 
      holder.checkbox = (CheckBox) vi 
        .findViewById(R.id.raw_customlabel_checkbox); 
      vi.setTag(holder); 

     } else { 
      holder = (Holder) vi.getTag(); 
     } 

     vi.setTag(holder); 
     holder.txtname.setText(strarry[position]); 

     holder.checkbox.setId(position); 
     holder.checkbox.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       for (int i = 0; i < strarry.length; i++) { 
        if (v.getId() == i) { 
         checkarry[i] = true; 
         Log.v("check", ""+position); 
        } else { 
         checkarry[i] = false; 
        } 
       } 
       notifyDataSetChanged(); 
      } 
     }); 

     if (checkarry[position]) { 
      holder.checkbox.setChecked(true); 
     } else { 
      holder.checkbox.setChecked(false); 
     } 

     return vi; 
    } 

} 
1

這些下面的代碼使用它會正常工作對您

int selected_position =-1 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 


if(selected_position==position) 
     { 
      CHECKBOX.setChecked(true); 

     } 
     else 
     { 
      CHECKBOX.setChecked(false); 

     } 

      CHECKBOX.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 



        if (((CheckBox) view).isChecked()) 
        { 
         selected_position= position; 

        } 
        else 
        { 
         selected_position=-1; 
        } 


        notifyDataSetChanged(); 


       } 
      }); 
     return view; 
    } 

} 
相關問題