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;
}