如何在android中使用复选框跟踪ListView中选中的行

如何在android中使用复选框跟踪ListView中选中的行,android,listview,checkbox,Android,Listview,Checkbox,目前,我参与了一个与在线食品订购相关的android应用程序开发。我有一个具有以下架构的listView: itemName1 itemPrice1 checkBox itemName2 itemPrice2 checkBox itemName3 itemPrice3 checkBox . . . GetYourCart[Button] 我的任务是在用户按下按钮时,用价格和总价跟踪

目前,我参与了一个与在线食品订购相关的android应用程序开发。我有一个具有以下架构的listView:

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