1

現在、foodItemのオンライン注文に関連するAndroidアプリの開発に携わっています。私は次のスキーマを持つlistViewを持っています:

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


          GetYourCart[Button]

私の仕事は、ユーザーがボタンを押したときに、選択した各itemNameを価格と合計価格で追跡することです。使用しました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 に答える