2012-02-23 59 views
1

在我的項目中,我動態顯示覆選框。但我想獲得所有複選框的選擇的ID值。在我的應用程序中,用戶將選擇多個複選框,我需要將這些選中的複選框ID存儲在一個數組列表中。 如何獲得選定的複選框ID?如何獲取在android中動態顯示的選定複選框的ID?

我的代碼:

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View view = convertView; 
    try 
    { 
    if (view == null) 
    { 
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = vi.inflate(R.layout.list_item1, null); 
    } 
    final UserBO listItem = mList.get(position);    
    if (listItem != null) 
     { 

    Rl = (LinearLayout)findViewById(R.id.chklnlayout); 

    ArrayList<UserBO> mList1; 

    CheckBox[] cbs = new CheckBox[20]; 

    for(int k=0; k<list.size(); k++) 
    { 
    System.out.println("list in for loop"+list.get(0)); 
    arr = list.get(k); 
    cbs[k] = new CheckBox(getContext()); 
    Rl.addView(cbs[k]); 
    cbs[k].setText((CharSequence) arr.get(2)); 
    cbs[k].setTextColor(Color.parseColor("#000000")); 
    } 

    } 
} 
catch(Exception e){ 
    String err = (e.getMessage()==null)?"hii":e.getMessage(); 
    Log.e("sdcard-err2:",err); 
} 
return view; 
} 

請幫我對此....提前

回答

2

在你的循環代碼謝謝,

寫這條線,

cbs[k].setId(k); 

現在implements OnClickListener在您的活動

@Override 
public void onClick(View v) 
{ 
int checkBoxId = v.getId();  
} 

或類似的東西,

@Override 
    public void onClick(View v) 
    { 
     // Perform action on clicks, depending on whether it's now checked 
     if (((CheckBox) v).isChecked()) { 
      Toast.makeText(Activity.this, "Selected CheckBox ID" + v.getId(), Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(Activity.this, "Not selected", Toast.LENGTH_SHORT).show(); 
     } 
} 

讓我知道發生什麼事..

+0

嗨,感謝您的回覆....我如何在點擊監聽器上編寫複選框? – RaagaSudha 2012-02-23 07:00:18

+0

只是在您的活動中實現了OnClickListener。 – user370305 2012-02-23 07:08:37

+0

嗨我已編輯我的代碼..請檢查一次..我在列表中顯示覆選框,因此我在getview方法中編寫代碼。現在,如果我在我的活動中實現onclicklistener,我怎樣才能在getview方法中編寫onclick方法?請幫助我解決這個問題 – RaagaSudha 2012-02-23 11:08:14

0

U可以實現諸如此。

checkBox.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 
       System.out.println("checkBox.isChecked()" 
         + checkBox.isChecked()); 
       if (checkBox.isChecked() == true) { 
        PhoneListCheckbox.phonelist.get(position).setChecked(
          true); 
       } else { 
        PhoneListCheckbox.phonelist.get(position).setChecked(
          false); 
       } 
      } 
     }); 
0

你可以試試這個了(我沒有測試過):

final HashMap<Integer,Integer> myList=new HashMap<Integer, Integer>();  
for(int i=1;i<=20;i++) 
{ 
    final CheckBox cb=new CheckBox(context); 
    cb.setId(i); 
    myList.put(i, 0); 
    final int pos=i; 
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 

     if(cb.isChecked()) 
     myList.put(pos, 1);// checkbox checked 
     else 
     myList.put(pos,0);//checkbox unchecked     
    } 
    }); 
} 

而且你可以通過只int status=myList.get(checkbox_id);訪問複選框的狀態時,你need.here 1表示檢查和0表示未勾選複選框。

+0

使用你的代碼我認爲20匿名類創建新的OnCheckedChangeListener()也需要額外的HashMap集合來存儲選中的複選框的ID。 – user370305 2012-02-23 07:46:21

0

當我們在父動態創建的線性佈局的子複選框上應用「setOnClickListener」時,可以解決此問題。我已經使用「getLayoutInflater()」添加了複選框,併爲每個複選框設置了id。爲此,您可以看到下面的代碼。

for (int i = 0; i < JAS.length(); i++) { 

    View child = getLayoutInflater().inflate(R.layout.return_child, null); 
    chk = (CheckBox) child.findViewById(R.id.Product); 
    chk.setText(c.optString("name")); 
    chk.setId(i); 

    ll.addView(child); 

    chk.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String chk = null; 
      chk = Integer.toString(v.getId()); 
      if (((CheckBox) v).isChecked()) { 
       selchkboxlist.add(chk); 

      } else { 
       selchkboxlist.remove(chk); 
      } 
     } 
    }); 
} 

這裏selchkboxlist是「列表」 下同:

列表selchkboxlist =新的ArrayList();

現在點擊按鈕,您可以應用以下代碼訪問所選複選框的ID。

ReturnProducts.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     for (int p=0;p<selchkboxlist.size();p++){ 
      String Length = selchkboxlist.get(p); 
      int ln = Integer.parseInt(Length); 
      Toast.makeText(ReturnOrders.this, ""+ln, Toast.LENGTH_LONG).show(); 
     } 

    } 
}); 
相關問題