Android 如何选中和取消选中复选框?

Android 如何选中和取消选中复选框?,android,listview,android-checkbox,Android,Listview,Android Checkbox,我有一个名为“SelectUserAdapter”的自定义适配器类,用于在列表视图中显示电话联系人、图像、电话号码和复选框。问题是我无法选中或取消选中复选框。 代码如下: package com.trendsetter.vyshnav.vyshnavgetcontact; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFac

我有一个名为“SelectUserAdapter”的自定义适配器类,用于在列表视图中显示电话联系人、图像、电话号码和复选框。问题是我无法选中或取消选中复选框。 代码如下:

    package com.trendsetter.vyshnav.vyshnavgetcontact;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Build;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.ImageView;
    import android.widget.TextView;

    import com.trendsetter.vyshnav.vyshnavgetcontact.R;


    import java.util.ArrayList;
    import java.util.List;
    import java.util.Locale;


    class SelectUserAdapter extends BaseAdapter {

    public List<SelectUser> _data;
    private ArrayList<SelectUser> arraylist;
    Context _c;
    ViewHolder v;


    public SelectUserAdapter( Context context, List<SelectUser> selectUsers)       
    {
    _data = selectUsers;
    _c = context;
    this.arraylist = new ArrayList<SelectUser>();
    this.arraylist.addAll(_data);
    }

    @Override
    public int getCount() {
    return _data.size();
    }

    @Override
    public Object getItem(int i) {
    return _data.get(i);
    }

    @Override
    public long getItemId(int i) {
    return i;
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
    View view = convertView;
    if (view == null) {
        LayoutInflater li = (LayoutInflater)    
    _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = li.inflate(R.layout.contact_info, null);
        Log.e("Inside", "here--------------------------- In view1");
    } else {
        view = convertView;
        Log.e("Inside", "here--------------------------- In view2");
    }

    v = new ViewHolder();

    v.title = (TextView) view.findViewById(R.id.name);
    v.check = (CheckBox) view.findViewById(R.id.check);
    v.phone = (TextView) view.findViewById(R.id.no);
    v.imageView = (ImageView) view.findViewById(R.id.pic);

    final SelectUser data = (SelectUser) _data.get(i);
    v.title.setText(data.getName());
    v.check.setChecked(data.getCheckedBox());
    v.phone.setText(data.getPhone());

    // Set image if exists
    try {

        if (data.getThumb() != null) {
            v.imageView.setImageBitmap(data.getThumb());
        } else {
            v.imageView.setImageResource(R.drawable.image);
        }
        // Setting round image
        Bitmap bm = BitmapFactory.decodeResource(view.getResources(),  
      R.drawable.image); // Load default image

        v.imageView.setImageBitmap(bm);
      } catch (OutOfMemoryError e) {
        // Add default picture
        v.imageView.setImageDrawable(this._c.getDrawable(R.drawable.image));
        e.printStackTrace();
      }

       Log.e("Image Thumb", "--------------" + data.getThumb());

      // Set check box listener android
      v.check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox checkBox = (CheckBox) view;
            if (checkBox.isChecked()) {
                data.setCheckedBox(true);
              } else {
                data.setCheckedBox(false);
            }
        }
      });

     view.setTag(data);
       return view;
     }

     // Filter Class
      public void filter(String charText) {
     charText = charText.toLowerCase(Locale.getDefault());
     _data.clear();
     if (charText.length() == 0) {
        _data.addAll(arraylist);
     } else {
        for (SelectUser wp : arraylist) {
            if (wp.getName().toLowerCase(Locale.getDefault())
                    .contains(charText)) {
                _data.add(wp);
            }
        }
    }
    notifyDataSetChanged();
    }
    static class ViewHolder {
    ImageView imageView;
    TextView title, phone;
    CheckBox check;
    }
    }

如何成功选中复选框?

在xml文件中,只需在父布局中添加一行即可

android:descendantFocusability=”blocksDescendants”
您也可以参考以下链接:


我想你的问题是当你点击
复选框时。。。
您必须在
v.check.setOnclick中更改body方法,如下所示:

      v.check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox checkBox = (CheckBox) view;
            if (checkBox.isChecked()) {
                ((SelectUser) _data.get(i)).setCheckedBox(true);
              } else {
                ((SelectUser) _data.get(i)).setCheckedBox(false);
            }
            notifyDatasetChanged();
        }
      });

请为checkboxsure发布您的xml文件代码。。。请稍等。您可以将android:DegenantFocusability=“BlocksDescents”添加到您的复选框:)它应该可以正常工作:)不。它仍然不工作。您的复选框的click listener是否正常工作?错误:(106,43)错误:局部变量i是从内部类访问的;需要声明finalset i为final>>final int i
android:descendantFocusability=”blocksDescendants”
      v.check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox checkBox = (CheckBox) view;
            if (checkBox.isChecked()) {
                ((SelectUser) _data.get(i)).setCheckedBox(true);
              } else {
                ((SelectUser) _data.get(i)).setCheckedBox(false);
            }
            notifyDatasetChanged();
        }
      });