如何获取android中列表中的复选框选中位置?

时间:2011-12-15 14:46:39

标签: android android-layout android-listview

我创建了一个列表视图,每行包含复选框和文本,我需要在列表中获取复选框为真的一些文本(选中)。我需要使用复选框传递从列表中选择的文本值。

这是我的代码:

gatwayList = (ListView) findViewById(R.id.gatwaylist);

        ArrayList<HashMap<String,String>> wholeDetailsList = new ArrayList<HashMap<String,String>>();
        for (int i = 0; i < 5; i++)
        {


        HashMap<String, String> map = new HashMap<String, String>();
        map.put("name", "Test+ i");
        //map.put("address", wrap_address);
        wholeDetailsList.add(map);
        }

        SimpleAdapter wholeDetailsAdapter = new SimpleAdapter(this,
                wholeDetailsList, R.layout.gatway_row, new String[] {"name"}, new int[] {R.id.gatwayId});
        gatwayList.setCacheColorHint(0);
        gatwayList.setAdapter(wholeDetailsAdapter);

gatway_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    >
 <CheckBox
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4px"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="10px" >
    </CheckBox>


     <TextView android:id="@+id/gatwayId"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="ffff"
         android:textSize="18dip"
         android:layout_marginTop="15dip"
         android:layout_marginLeft="60dip"
         android:textStyle="bold"
         android:textColor="#000000"/>


</RelativeLayout>

列表看起来像

enter image description here

在这种情况下,我必须传递所有值。否则只选择值。任何意见将不胜感激?

2 个答案:

答案 0 :(得分:1)

使用它代替,它更好:

listView.setChoiceMode(CHOICE_MODE_MULTIPLE);
listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, fields));

然后选择这样的选项:

listView.getCheckedItemPositions();

答案 1 :(得分:0)

我正在使用以下代码获取预期的Ui和功能

TableLayout table;
final int row = 6; //variable to get the number of row
        final CheckBox cb[] = new CheckBox[row];

                     table = (TableLayout) findViewById(R.id.gatwaylist);

                    for (int i=0;i<row;i++)

                    {
                          TableRow row = new TableRow(this);

                          CheckBox gateway = new CheckBox(this);
                          gateway.setGravity(Gravity.CENTER);
                       //   gateway.se
                          gateway.setTextColor(Color.BLACK);
                          gateway.setText("Gateway"+i);

                          row.addView(gateway);

                          View view = new View(this);
                          view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 2));
                          view.setBackgroundColor(Color.BLACK);
                          table.addView(row);
                          if(!(i == numgateways-1))
                          {
                              table.addView(view); 
                          }



                          cb[i] = gateway;
                    }

和表布局xml元素如下:

<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
        <TableLayout android:id="@+id/gatwaylist" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_weight="1"
        android:transcriptMode="normal" android:headerDividersEnabled="true" android:background="@drawable/framebackground"
        >
        </TableLayout></ScrollView>

您可以通过任何onclick方法中的以下代码获取所选项目:

for(int i=0;i<row;i++)
                              {
                                    if(cb[i].isChecked())
                                          {
                                                Toast.makeText(TestVideoActivity.this, "Checked :"+cb[i].getText(), Toast.LENGTH_SHORT).show();
                                          }
                              }         }