Android 如何获取用户选择的所有复选框
我有一个带有复选框的列表视图 下面是我的getView方法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
@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);
}