使用复选框动态地将视图添加到列表视图行

时间:2015-09-24 08:22:46

标签: android listview checkbox android-listview

我有一个listview,我需要动态地将视图添加到listview行。我已经这样做但动态添加的视图有一个复选框。   因此,例如,如果我在列表视图的一行中添加了两个动态视图,当我选中一个复选框时,另一个必须取消选中。无论动态视图的数量是多少,一次只能选择一个复选框。

这是我用来将动态视图添加到listview的行及其在适配器的getview中的代码。

if (commutes.get(position).types.size() != 0) {


            viewHolder.parentPanel.setVisibility(View.VISIBLE);

            viewHolder.parentPanel.removeAllViews();


            for (i = 0; i < commutes.get(position).types.size(); i++) {

                // inflate child
                View item = inflater.inflate(R.layout.childview, null);


                CheckBox chk = (CheckBox) item.findViewById(R.id.ck);


                int newId=Integer.parseInt(position+""+i);
                chk.setId(newId);
                if(mChecked.contains(newId))
                {
                    chk.setChecked(true);
                }
                else
                {
                    chk.setChecked(false);

                }



                chk.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        if (cb.isChecked()) {
                            mChecked.add(cb.getId());
                        } else {

                            mChecked.remove(mChecked.indexOf(cb.getId()));


                        }
                    }

                });



                TextView rupeeSymbol = (TextView) item.findViewById(R.id.tvRupeesSymbol);
                rupeeSymbol.setTypeface(AppUtil.getINRTypeFace());
                TextView rupees = (TextView) item.findViewById(R.id.tvRupees);
                TextView kms = (TextView) item.findViewById(R.id.tvkm);

                rupees.setText(Html.fromHtml("<b>" + commutes.get(position).types.get(i).price + "</b>" +
                        "<small>" + " for " + "</small>"));

                kms.setText(Html.fromHtml("<b>" + commutes.get(position).types.get(i).kms + "</b>" +
                        "<small>" + " (" + commutes.get(position).types.get(i).free_text + ")" + "</small>" + "<br />"));


                int viewId = position + i;
                item.setId(viewId);
                viewHolder.parentPanel.addView(item);

            }

        } else {
            viewHolder.parentPanel.setVisibility(View.GONE);

        }

对于下面的复选框功能,声明了代码

ArrayList<Integer> mChecked=new  ArrayList<Integer>();

这是适配器的视图。

private static class ViewHolder {
        LinearLayout parentPanel;
        TextView locationSelected;
        TextView price;
        TextView carName;

    }

这是子视图的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:id="@+id/relativeLayout"
    tools:context=".CommuteActivity">

    <TextView
        android:id="@+id/tvRupeesSymbol"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical"
        android:text="`"
        android:textColor="@color/text_dark_grey"
        android:textSize="16sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:layout_toRightOf="@+id/tvRupeesSymbol"
        android:gravity="center"
        android:id="@+id/tvRupees"
        android:layout_marginLeft="5dp"
        android:layout_gravity="center_vertical"
        android:text="ddddddd"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:id="@+id/tvkm"
        android:layout_toRightOf="@+id/tvRupees"
        android:gravity="center_vertical"
        android:layout_gravity="center"
        />


    <CheckBox
        android:id="@+id/ck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_alignParentRight="true"
        android:layout_gravity="center"
        android:src="@drawable/tick"/>
</RelativeLayout>

0 个答案:

没有答案