Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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_Arrays_Checkbox - Fatal编程技术网

Android 获取适配器中复选框的选中和未选中状态的数组

Android 获取适配器中复选框的选中和未选中状态的数组,android,arrays,checkbox,Android,Arrays,Checkbox,我将创建在每个列表中包含复选框和文本视图的列表视图。我面临的问题是,我无法从适配器类中检索已检查和未检查值的数组。我在这里附加了一些代码。 这是我的适配器类 public class MyFacilityAdapter<T> extends BaseAdapter { ArrayList<T> mFList; LayoutInflater mInflate; SparseBooleanArray mySaprseBooleanArray;

我将创建在每个列表中包含复选框和文本视图的列表视图。我面临的问题是,我无法从适配器类中检索已检查和未检查值的数组。我在这里附加了一些代码。 这是我的适配器类

public class MyFacilityAdapter<T> extends BaseAdapter {

    ArrayList<T> mFList;
    LayoutInflater mInflate;
    SparseBooleanArray mySaprseBooleanArray;
    ArrayList<Integer> items = new ArrayList<Integer>();

    public MyFacilityAdapter(Context mContext, ArrayList<T> facilityList) {
        // TODO Auto-generated constructor stub
        mInflate = LayoutInflater.from(mContext);

        mySaprseBooleanArray = new SparseBooleanArray();

        mFList = new ArrayList<T>();
        this.mFList = facilityList;
    }

    /*public ArrayList<T> getCheckeditems() {

        ArrayList<T> tempArray = new ArrayList<T>();

        for (int i = 0; i < mFList.size(); i++) {
            if (mySaprseBooleanArray.get(i)) {
                tempArray.add(mFList.get(i));
            }
        }

        return tempArray;
    }*/
    ArrayList<Integer> getAdapterItems() {
        return items;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mFList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return mFList.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int postion, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        if (convertView == null) {
            convertView = mInflate.inflate(R.layout.row_facility, null);
        }

        TextView tvFName = (TextView) convertView
                .findViewById(R.id.tv_facilityName);
        tvFName.setText(mFList.get(postion).toString());
        CheckBox chkBox = (CheckBox) convertView.findViewById(R.id.chkBox);
        chkBox.setTag(postion);
        /*chkBox.setChecked(mySaprseBooleanArray.get(postion));*/
        chkBox.setOnCheckedChangeListener(mChkChangedListener);

        return convertView;
    }

    OnCheckedChangeListener mChkChangedListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            CheckBox chk = (CheckBox) buttonView;
            // TODO Auto-generated method stub
            if (chk.isChecked()) {
                items.set(chk.getTag(), 1);
            } else {
                items.set(chk.getTag(), 0);
            }
            /*mySaprseBooleanArray.put((Integer) buttonView.getTag(), isChecked);*/
        }
    };

}

“items”ArrayList需要预先填充与列表中的行数相同的元素数。(现在,每当用户选中或取消选中任何行时,您都会向ArrayList追加一个新的整数元素,这是没有意义的。)

如果执行上述操作,则onCheckChanged()可以如下所示:

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        CheckBox chk = (CheckBox) buttonView;
        if (chk.isChecked()) {
            items.set(chk.getTag(), 1);
        } else {
            items.set(chk.getTag(), 0);
        }
        /*mySaprseBooleanArray.put((Integer) buttonView.getTag(), isChecked);*/
    }
我明白了。 首先将整数1或0放入SparseBoolean数组,如下所示:

if (chk.isChecked()) {
                mySaprseBooleanArray.put((Integer) chk.getTag(), isChecked);
            } else {
                mySaprseBooleanArray.put((Integer) chk.getTag(), isChecked);
            }
那么, 要获取选中项和未选中项数组,请执行以下操作:

public ArrayList<Integer> getCheckeditems() {

        ArrayList<Integer> items = new ArrayList<Integer>();
        for (int i = 0; i < mFList.size(); i++) {
            Boolean temp = mySaprseBooleanArray.get(i);
            if (temp) {
                items.add(1);
            } else {
                items.add(0);
            }
        }

        return items;
    }
public ArrayList getCheckeditems(){
ArrayList items=新建ArrayList();
对于(int i=0;i

此处项目以100101010的形式返回;1为选中状态,0为未选中状态。

我按照您所说的修改了代码。但它似乎仍然不是古德。如何准确地预填充“项目”??
public ArrayList<Integer> getCheckeditems() {

        ArrayList<Integer> items = new ArrayList<Integer>();
        for (int i = 0; i < mFList.size(); i++) {
            Boolean temp = mySaprseBooleanArray.get(i);
            if (temp) {
                items.add(1);
            } else {
                items.add(0);
            }
        }

        return items;
    }