如何在android中使用复选框跟踪ListView中选中的行
目前,我参与了一个与在线食品订购相关的android应用程序开发。我有一个具有以下架构的listView:如何在android中使用复选框跟踪ListView中选中的行,android,listview,checkbox,Android,Listview,Checkbox,目前,我参与了一个与在线食品订购相关的android应用程序开发。我有一个具有以下架构的listView: itemName1 itemPrice1 checkBox itemName2 itemPrice2 checkBox itemName3 itemPrice3 checkBox . . . GetYourCart[Button] 我的任务是在用户按下按钮时,用价格和总价跟踪
itemName1 itemPrice1 checkBox
itemName2 itemPrice2 checkBox
itemName3 itemPrice3 checkBox
.
.
.
GetYourCart[Button]
我的任务是在用户按下按钮时,用价格和总价跟踪每个选定的项目名称。我使用了SparseBooleanArray sbArray=myMenulist.getCheckedItemPositions()代码>但它没有显示任何结果
我如何实现这一点?我已经看过stackoverflow和其他在线教程中提出的几个问题,但都不明白
编辑:以下是我用于检查结果的选定项目的代码:
btnyourCart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String selected = "";
int cntChoice = myMenulist.getCount();
SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions();
for(int i=0;i<cntChoice;i++){
if(sbArray.get(i)) {
selected += myMenulist.getItemAtPosition(i).toString() + "\n";
}
}
Log.e("menu","Items "+selected);
Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show();
}
});
btnyourCart.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
所选字符串=”;
int cntChoice=myMenulist.getCount();
SparseBooleanArray sbArray=myMenulist.GetCheckEditePositions();
对于(int i=0;i,您需要在getView()方法中的自定义适配器中执行以下操作:将复选框值保留在列表位置,并将该值存储在数组中。这将保留复选框值及其位置
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.del_many_task_chk);
viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkBox.getTag();
element.isChecked = buttonView.isChecked();
}
});
view.setTag(viewHolder);
viewHolder.checkBox.setTag(list.get(position));
}else{
view = convertView;
((ViewHolder)view.getTag()).checkBox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.checkBox.setChecked(list.get(position).isChecked);
return view;
}
现在,当需要知道哪个复选框被选中或未选中时,您需要使用迭代器遍历列表项。根据复选框值获取选中和未选中的项
for(int i=0;i<list.size();i++){
if(all_task_list.get(i).isChecked){
// to do things for checked item
}else{
// to do things for uncheck item
}
}
for(int i=0;i您需要在getView()方法中的自定义适配器中执行此操作,以将复选框值保留在列表位置,并将该值存储在数组中。这将使复选框值与其位置保持一致
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.del_many_task_chk);
viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkBox.getTag();
element.isChecked = buttonView.isChecked();
}
});
view.setTag(viewHolder);
viewHolder.checkBox.setTag(list.get(position));
}else{
view = convertView;
((ViewHolder)view.getTag()).checkBox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.checkBox.setChecked(list.get(position).isChecked);
return view;
}
现在,当需要知道哪个复选框被选中或未选中时,您需要使用迭代器遍历列表项。根据复选框值获取选中和未选中的项
for(int i=0;i<list.size();i++){
if(all_task_list.get(i).isChecked){
// to do things for checked item
}else{
// to do things for uncheck item
}
}
for(int i=0;i保存您的复选框检查代码,以便在该位置进行更新。@hardikjoshi我已使用代码引用此粘贴您的复选框检查代码,以便在该位置进行更新。@hardikjoshi我已使用代码引用此编辑了问题。@hardikjoshi