Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取用户选择的所有复选框_Android_Listview_Checkbox - Fatal编程技术网

Android 如何获取用户选择的所有复选框

Android 如何获取用户选择的所有复选框,android,listview,checkbox,Android,Listview,Checkbox,我有一个带有复选框的列表视图 下面是我的getView方法 @Override public View getView(int position, View convertView, ViewGroup parent) { view = convertView; if (convertView == null) { //inflate the view for each row of listview vi

我有一个带有复选框的列表视图

下面是我的getView方法

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        view = convertView;

        if (convertView == null) {
            //inflate the view for each row of listview
            view = layoutInflater.inflate(R.layout.rating_item, null);
            mViewHolder = new ViewHolder();

            mViewHolder.mstatus = (TextView) view.findViewById(R.id.ratingStatus);
            mViewHolder.mCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
            view.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) view.getTag();
        }

        if (StarListHolder.getInstance().getStarOne().toString() != null) {

            String starTest = String.valueOf(listForView.get(position));
            ArrayList<String> starOne = StarListHolder.getInstance().getStarOne();
            List<String> starList = StarTest.getInstance().getStarList();
            mViewHolder.mstatus.setText(starList.get(position));
        }
        return view;
    }}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
//为listview的每一行膨胀视图
视图=布局更平坦。充气(R.layout.rating_项,空);
mViewHolder=新的视图持有者();
mViewHolder.mstatus=(TextView)view.findViewById(R.id.ratingStatus);
mViewHolder.mCheckBox=(复选框)view.findviewbyd(R.id.CheckBox);
view.setTag(mViewHolder);
}否则{
mViewHolder=(ViewHolder)view.getTag();
}
if(StarListHolder.getInstance().getStarOne().toString()!=null){
String starTest=String.valueOf(listForView.get(position));
ArrayList starOne=StarListHolder.getInstance().getStarOne();
List starList=StarTest.getInstance().getStarList();
mViewHolder.mstatus.setText(starList.get(position));
}
返回视图;
}}
我如何知道用户正在检查的复选框的数量。

//关于活动或片段类
//On your Activity or fragment Class
btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {   



int count = listView.getAdapter().getCount();
            LinearLayout ll=(LinearLayout)v.findViewById(R.id.ll1);

            for (int i = 0; i < count; i++) {

                ll = (LinearLayout) gridView.getChildAt(i);

                CheckBox cb = (CheckBox)ll.findViewById(R.id.checkbox1);
                TextView tv = (TextView)ll.findViewById(R.id.textView1);
                //  StringBuilder stringBuilder=new StringBuilder();
                if (cb.isChecked()) {

                    Log.e("CheckBoxch", "" + cb.getTag().toString());
                    Log.e("text", "" + tv.getTag().toString());
                    stringBuilder.append(tv.getTag().toString() + ",");
                    type_of_truck_appended = stringBuilder.toString();
                    if (pwindowforTruckName.isShowing()) {
                        pwindowforTruckName.dismiss();
                    }


                }
            } 
}
btn.setOnClickListener(新的OnClickListener(){ @凌驾 公共void onClick(视图v){ int count=listView.getAdapter().getCount(); LinearLayout ll=(LinearLayout)v.findViewById(R.id.ll1); for(int i=0;i
像这样试试。

private static int checkBoxCounter = 0;

mViewHolder.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked && checkBoxCounter>=2){
            list.get(position).setChecked(false);
            mViewHolder.mCheckBox.setChecked(false);

        }else {
            if (isChecked) {
                starOne.add((Integer) mViewHolder.mCheckBox.getTag());
                checkBoxCounter++;              
            } else {
                checkBoxCounter--;
            }
            cCheckedItems.setText(checkBoxCounter); //<-- ADD THIS
            Toast.makeText(context, "there are " + checkBoxCounter + " items selected", Toast.LENGTH_LONG).show();
        }}});
在适配器中全局定义它。

private static int checkBoxCounter = 0;

mViewHolder.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked && checkBoxCounter>=2){
            list.get(position).setChecked(false);
            mViewHolder.mCheckBox.setChecked(false);

        }else {
            if (isChecked) {
                starOne.add((Integer) mViewHolder.mCheckBox.getTag());
                checkBoxCounter++;              
            } else {
                checkBoxCounter--;
            }
            cCheckedItems.setText(checkBoxCounter); //<-- ADD THIS
            Toast.makeText(context, "there are " + checkBoxCounter + " items selected", Toast.LENGTH_LONG).show();
        }}});
private static int checkBoxCounter=0;
mViewHolder.mCheckBox.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(isChecked&&checkBoxCounter>=2){
list.get(position).setChecked(false);
mViewHolder.mCheckBox.setChecked(false);
}否则{
如果(已检查){
add((整数)mViewHolder.mCheckBox.getTag());
checkBoxCounter++;
}否则{
支票箱计数器--;
}
cCheckedItems.setText(checkBoxCounter);//
//创建一个模态类
mSparseBooleanArray=新SparseBooleanArray();
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
//为listview的每一行膨胀视图
视图=布局更平坦。充气(R.layout.rating_项,空);
mViewHolder=新的视图持有者();
mViewHolder.mstatus=(TextView)view.findViewById(R.id.ratingStatus);
mViewHolder.mCheckBox=(复选框)view.findviewbyd(R.id.CheckBox);
view.setTag(mViewHolder);
}否则{
mViewHolder=(ViewHolder)view.getTag();
}
if(StarListHolder.getInstance().getStarOne().toString()!=null){
mViewHolder.mCheckBox.setTag(位置);
String starTest=String.valueOf(listForView.get(position));
ArrayList starOne=StarListHolder.getInstance().getStarOne();
List starList=StarTest.getInstance().getStarList();
mViewHolder.mstatus.setText(starList.get(position));
setOnCheckedChangeListener(新的CheckchangeListener(数据,mCheckBox));
}
返回视图;
}
//通过调用此方法获取所有选中项
公共ArrayList getCheckedItems(){
ArrayList mTempArry=新的ArrayList();
对于(int i=0;i
我猜您会想对这些数据做些什么&反映列表中的更改。以下是步骤:

1) 在适配器中创建一个接口

2) 根据您分别使用的是
RecyclerView
还是
BaseAdapter
方法,在
onBindViewHolder
方法或
getView
方法内的整行/复选框上应用点击侦听器

3) 在活动中实现该接口并通知适配器已在Li中进行了更改
//Create a modal class
mSparseBooleanArray = new SparseBooleanArray();

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        view = convertView;

        if (convertView == null) {
            //inflate the view for each row of listview
            view = layoutInflater.inflate(R.layout.rating_item, null);
            mViewHolder = new ViewHolder();

            mViewHolder.mstatus = (TextView) view.findViewById(R.id.ratingStatus);
            mViewHolder.mCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
            view.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) view.getTag();
        }

        if (StarListHolder.getInstance().getStarOne().toString() != null) {
mViewHolder.mCheckBox.setTag(position);
            String starTest = String.valueOf(listForView.get(position));
            ArrayList<String> starOne = StarListHolder.getInstance().getStarOne();
            List<String> starList = StarTest.getInstance().getStarList();
            mViewHolder.mstatus.setText(starList.get(position));

            mViewHolder.mstatus.setOnCheckedChangeListener(new CheckchangeListener(data,mCheckBox));
        }
        return view;
    }

    //get all checked items by calling this method

    public ArrayList<String> getCheckedItems() {
        ArrayList<String> mTempArry = new ArrayList<String>();

        for (int i = 0; i < listForView.size(); i++) {
            if (mSparseBooleanArray.get(i)) {

                String data = listForView.get(i);

                mTempArry.add(data);
            }
        }

        return mTempArry;
    }
    class CheckchangeListener implements OnCheckedChangeListener {
        private int position;

        public CheckchangeListener(int position) {
            // TODO Auto-generated constructor stub

            this.position= position;

        }

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                checkbox
                        .setButtonDrawable(R.drawable.notification_selected_checkbox);

            } else {
                checkbox
                        .setButtonDrawable(R.drawable.notification_checkbox);

            }
            buttonView.setChecked(isChecked);

            mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);

        }
    }
    }
interface OnListFragmentInteractionListener {
    void onListFragmentInteraction(String strSelectedItemName, int intPosition);
}
holder.Row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (null != mListener) {
                // Notify the active callbacks interface (the activity, if the
                // fragment is attached to one) that an item has been selected.
                mListener.onListFragmentInteraction(holder. strSelectedItemName, intPosition);
            }
        }
    });
@Override
public void onListFragmentInteraction(String strSelectedItemName, int intPosition) {
    if(lsSelection == null)
        lsSelection = new ArrayList<>();
    if(lsSelection.contains(strSelectedItemName)) {
        lsSelectedAreas.remove(strSelectedItemName);
        recyclerViewAdapter.getSelection().remove(strSelectedItemName);
        recyclerViewAdapter.getSelection().put(strSelectedItemName, false);
        recyclerViewAdapter.notifyItemChanged(intPosition);
    } else {
        lsSelectedAreas.add(strSelectedItemName);
        recyclerViewAdapter.getSelection().remove(strSelectedItemName);
        recyclerViewAdapter.getSelection().put(strSelectedItemName, true);
        recyclerViewAdapter.notifyItemChanged(intPosition);
    }
}
//Show selected / unselected checkbox based on isSelected Value
//hmSelection is the HashMap that maintains the list of items selected in the adapter. 
    if((hmSelection.containsKey(holder.strSelectedItemName) && hmSelection.get(holder.strSelectedItemName))
            || lsSelectedList != null && lsSelectedList.contains(holder.strSelectedItemName)) {
        if(!hmSelection.containsKey(holder.strSelectedItemName))
            hmSelection.put(holder.strSelectedItemName, true);
        holder.cbCheckBox.setImageResource(R.drawable.checkedtick_checkbox);
    } else {
        if(!hmSelection.containsKey(holder.strSelectedItemName))
            hmSelection.put(holder.strSelectedItemName, false);
        holder.cbCheckBox.setImageResource(R.drawable.ic_checkbox_unselected);
    }