說明: 我嘗試了更多,但沒有得到完美的解決方案,根據我的預期。 我想通過在BaseAdapter中點擊listview行的checbox來檢查??。我該如何檢查Android的Listivew的ItemClickListener事件複選框?
AcCategoryAdapter.java
public class AcCategoryAdapter extends BaseAdapter{
private Activity activity;
private List<AcCategory> acCategoryList;
private LayoutInflater inflater;
public AcCategoryAdapter(Activity activity,List<AcCategory> acCategoryList){
this.activity=activity;
this.acCategoryList=acCategoryList;
inflater=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return this.acCategoryList.size();
}
@Override
public Object getItem(int position) {
return this.acCategoryList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private class Holder{
TextView txtCategoryName;
ImageView ivImg;
CheckBox cbCooling;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Holder holder;
if(convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.ac_problems_list,parent,false);
holder.txtCategoryName=(TextView)convertView.findViewById(R.id.txt_cooling);
holder.ivImg=(ImageView)convertView.findViewById(R.id.iv_img);
holder.cbCooling=(CheckBox)convertView.findViewById(R.id.cb_cooling);
convertView.setTag(holder);
}
else{
holder=(Holder)convertView.getTag();
}
final AcCategory acCategory=acCategoryList.get(position);
holder.txtCategoryName.setText(acCategory.getName());
// convertView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(activity,acCategory.getName(), Toast.LENGTH_SHORT).show();
// holder.cbCooling.setChecked(true);
// }
// });
return convertView;
}
list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_cooling"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/iv_img"
android:layout_width="25dp"
android:layout_height="25dp"
android:contentDescription="@string/img_desc"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_cooling" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_cooling"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="@string/txt_cooling"
android:textSize="18sp" />
<CheckBox
android:id="@+id/cb_cooling"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:button="@drawable/checkbox_checked"
android:checked="false" />
</RelativeLayout>
</LinearLayout>
以上列表行那裏我的ImageView,TextView的和CheckBox和其膨脹到我的適配器
這裏來自活動的適配器的呼叫
lvProblem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e(TAG,"LISTVIEW SELECTED ITEM:-"+acCategoryList.get(position).getName());
}
});
另外,我從onItemClickListener和複選框本身獲得了它的功能。
請幫我解決這個問題。
我建議你在AcCategory.class中做到這一點 只需在對象上添加一個布爾值,然後單擊該項目時,將此對象的布爾值更改爲true/false,然後notifyDataSetChanged,Then在適配器getView部分,如果布爾值爲true,只需將複選框設置爲選中 –
您最好使用自定義適配器 –