1

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

itemName1  itemPrice1  checkBox
itemName2  itemPrice2  checkBox
itemName3  itemPrice3  checkBox
             .
             .
             .


          GetYourCart[Button]

我的任务是在用户按下按钮时跟踪每个选定的 itemNames 的价格和总价。我用过,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();


            }
        });

提前致谢!

4

2 回答 2

1
int total=0;

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

                     total+=myMenulist.get(i).price;

                }


            }
            Log.e("menu","Items "+selected);
            Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show();


        }
    });

现在在按钮单击事件上获取总数。

button.setOnClickListenernew View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Toast.makeText(
                    this,
                    ""+total,
                    Toast.LENGTH_LONG).show();

        }
    });
于 2012-09-25T05:44:43.177 回答
0

您需要在 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
    }
}
于 2012-09-25T05:37:02.193 回答