我有一個生成一個列表視圖有一個複選框,如下一個xml: onclick事件,使複選框
<?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="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<CheckBox
android:id="@+id/book_check"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:checked="false" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/book_check"
android:orientation="horizontal"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/finger" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/book_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="Title"
android:textColor="#000"
android:textSize="22sp" />
<TextView
android:text="Description"
android:id="@+id/book_descri"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FF2500"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
在我的自定義類,我有以下代碼,以幫助我管理我從我的小數據庫中獲取
private class SbListAdapter extends ArrayAdapter<SbItem> {
ArrayList<SbItem> SongBookList;
public SbListAdapter(Context context, int textViewResourceId,
ArrayList<SbItem> SongBookList) {
super(context, textViewResourceId, SongBookList);
this.SongBookList = new ArrayList<SbItem>();
this.SongBookList.addAll(SongBookList);
}
private class ViewHolder {
CheckBox book;
TextView title;
TextView descri;
}
@SuppressLint("InflateParams")
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null; Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.cc_list_select, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.book_title);
holder.descri = (TextView) convertView.findViewById(R.id.book_descri);
holder.book = (CheckBox) convertView.findViewById(R.id.book_check);
convertView.setTag(holder);
holder.book.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v ;
SbItem SbItem = (SbItem) cb.getTag();
SbItem.setSelected(cb.isChecked());
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
SbItem SbItem = SongBookList.get(position);
holder.title.setText(SbItem.getBook());
holder.descri.setText(SbItem.getDescri());
holder.book.setChecked(SbItem.isSelected());
holder.book.setTag(SbItem);
return convertView;
}
}
我的願望是,當點擊一行文本和一致時,該複選框被選中或取消選中,因爲目前這隻能在唯一的複選框是數據CL icked。 如果我嘗試輸入它只是給出錯誤。例如這可不行:
holder.title.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v ;
SbItem SbItem = (SbItem) cb.getTag();
SbItem.setSelected(cb.isChecked());
}
});
我只需要當用戶點擊該項目的任何地方,就像在設置活動工作。
我試圖做到這一點:
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v ;
SbItem SbItem = (SbItem) cb.getTag();
SbItem.setSelected(cb.isChecked());
}
});
但調試崩潰和控制檯上的錯誤時:
08-31 13:25:19.793:E/AndroidRuntime( 24214): java.lang.ClassCastException:android.widget.RelativeLayout不能 投地android.widget.CheckBox
你的意思是當點擊文本時你需要勾選複選框?如果是,那麼只需使用'convertView.setOnClickListener()....' – Piyush
生成一個錯誤先生 –
@Piyush好友,當用戶點擊單元格上的任何地方時,點擊和反之亦然。 – yash786