在我的项目中,我动态显示复选框。但我想获取所有复选框的ID值。在我的应用程序中,用户将选择多个复选框,我需要将这些选中的复选框id存储在arraylist中。 如何获取所选的复选框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;
}
请帮我解决这个问题....在此先感谢
答案 0 :(得分:3)
在你的循环代码中,
写下这一行,
cbs[k].setId(k);
您活动中的implements OnClickListener
in
@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();
}
}
让我知道发生了什么......
答案 1 :(得分:0)
你可以像这样实施。
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);
}
}
});
答案 2 :(得分: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);
。其中1表示已选中,0表示未选中复选框。
答案 3 :(得分: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是“List” 同如下:
列出selchkboxlist = new 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();
}
}
});