2016-08-04 55 views
0

说明: 我尝试了更多,但没有得到完美的解决方案,根据我的预期。 我想通过在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和复选框本身获得了它的功能。

请帮我解决这个问题。

+0

我建议你在AcCategory.class中做到这一点 只需在对象上添加一个布尔值,然后单击该项目时,将此对象的布尔值更改为true/false,然后notifyDataSetChanged,Then在适配器getView部分,如果布尔值为true,只需将复选框设置为选中 –

+0

您最好使用自定义适配器 –

回答

1
  1. 您可以添加在AcCategory.class参数,就像:

    boolean isChecked = false; 
    
  2. 您需要的变量器isChecked设置为真/假的OnItemClickListener

    lvProblem.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         // retrieve your relative item 
         <your adapter>.getItem(position).isChecked = !<your adapter>.getItem(position).isChecked; 
        } 
    }); 
    
  3. 在您的适配器,您需要在getView方法中添加复选框

    <your check box variable>.setChecked(acCategory.isChecked); 
    
  4. 每当你做出改变,你需要调用

    <your adapter variable>.notifyDataSetChanged(); 
    
+0

,我需要notifydatasetchanged()? –

+0

每次你改变私人列表 acCategoryList ;,你需要调用adapter.notifyDataSetChanged为了重画列表的UI –

+0

isChecked无法解决lvProblem项目点击 –

0

u必须创建一个字节变量。当以往任何时候都ü点击复选框,其cheked然后将其值设置一个,否则设置为零。并检查其在bindview上的值。 并通知你的清单。

相关问题