带有自定义列表视图的复选框

时间:2012-11-01 08:54:01

标签: android checkbox android-listview

我正在使用cursoradapter从数据库中获取值并在listview中显示它。我能够在listview中显示数据库内容,也可以点击特定项目我获得点击项目的值。现在我也想要复选框以便oncheck我应该得到已检查项的值(在这种情况下,复选框click和listitemclick都应该有效)是否可能?怎么做?

private void displayListView() {
        final Cursor cursor = dbHelper.fetchAllRecords();
        String[] columns = new String[] {
                RecordsDbAdapter.KEY_NAME,
                RecordsDbAdapter.KEY_BIRTHDAY,

        };
        int[] to = new int[] {
                R.id.name,
                R.id.birthdate,
        };
        dataAdapter = new SimpleCursorAdapter(
                this, R.layout.rownew,
                cursor,
                columns,    
                to);
        View v = getLayoutInflater().inflate(R.layout.customdialog, null);
        ListView listView = (ListView) v.findViewById(R.id.listChildren);
        final EditText etChild = (EditText) v.findViewById(R.id.etChild);
        listView.setAdapter(dataAdapter);
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                name = ((TextView) view.findViewById(R.id.name)) .getText().toString();
                BirtDate = ((TextView) view.findViewById(R.id.birthdate)) .getText().toString();
                Log.d("*************", name);

                Info=name+ " " +BirtDate;
                Log.d("nameeeeeeeeeeeeeeee",Info);
                etChild.setText(new StringBuilder().append(Info));
                topaste=etChild.getText().toString();
                    etChild.setText(new StringBuilder().append(Info1));
                //                  topaste1=etChild.getText().toString();
                //              }


            }
        })

我的rownew.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="#FFFFFF"
    android:gravity="center"
    android:padding="6dp" >

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text"
        android:textStyle="bold" >
    </TextView>

    <TextView
        android:id="@+id/birthdate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="@string/text"
        android:textStyle="bold" >
    </TextView>


</LinearLayout>

我的Customdialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/etChild"
         android:hint=""
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
    </EditText>

    <ListView
        android:id="@+id/listChildren"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF" >
    </ListView>
  </LinearLayout>

1 个答案:

答案 0 :(得分:0)

您可以扩展SimpleCursorAdapter为您的复选框添加点击监听器。这是我使用的代码片段:

public class MultiSelectCursorAdapter extends SimpleCursorAdapter {

  public MultiSelectCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
    }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    final int fposition = position;
    View view = super.getView(position, convertView, parent);
    CheckBox checkbox = (CheckBox) view.findViewById(R.id.list_checkbox);
    checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.d("CHECKER", "Something happened: " + fposition + " was clicked " + isChecked);
            // TODO: store id of checked items in your model
            }

    });

    return view;
    }
}

在列表行布局中,您需要设置android:focusable="false",以便允许点击列表项点击每个列表项的复选框。

<CheckBox
        android:id="@+id/list_checkbox"
        android:focusable="false" 
        ... >
</CheckBox>

最后,您需要一个模型或数据结构来存储列表中所有已检查的项目,例如存储所有已检查项的标识符的数组或列表。