3

私のアプリでは、注文するアイテムを選択しています。ここでの私の問題は、チェックボックスをチェックして注文すると、別のチェックボックスもチェックされていることです。意味単一のアイテムを選択すると、2つのアイテムがチェックされます。

そして、5つのアイテムから始めて、それは正しくチェックされ、注文ページに表示されます。6番目のアイテムから選択すると、注文ページに他のアイテムが表示されます。

これが私のリストのコードです:

    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        final ViewHolder viewHolder;
        if (view == null) {         
              view = inflater.inflate(R.layout.appetiserlistview, null);
            viewHolder = new ViewHolder();
            viewHolder.image=(ImageView)view.findViewById(R.id.appetiserimage);
            viewHolder.text = (TextView) view.findViewById(R.id.appetisertext);
            viewHolder.desc=(TextView)view.findViewById(R.id.appetiserdesc);
            viewHolder.price=(TextView)view.findViewById(R.id.appetiserprice);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.bcheck);


            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }






        viewHolder.image.setImageBitmap(bmps[position]);

        viewHolder.price.setText(prices[position]);
        viewHolder.desc.setText(descs[position]);
        viewHolder.checkbox.setTag(itemnames[position]);
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(itemnames[position]);
        viewHolder.checkbox.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (((CheckBox) v).isChecked())
                {
                    arr.add(itemnames[position]);
                    itemprice.add(prices[position]);
                       image.add(bmps[position]);


                }
4

3 に答える 3

0

すべてのチェックボックスの状態を保存し、それに応じて復元する必要があります。これは私がすでに投稿した例です。あなたが直面している問題があれば、私に知らせてください。私はあなたを助けようとします。

このリンクを確認してください

すべてのチェックボックスの状態を取得し、チェックされた項目の値を arraylist に追加するボタンを実装する方法は?

于 2012-05-25T06:44:10.150 に答える
0

リストビューの動作ごとに、スクロール時に Inflayet としてアイテムの状態を保存しないため、ブール値の配列を使用してチェック ボックスのステータスを保持する必要があります。

public class FriendListAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private boolean isCheck[] = new boolean[Data.fbFriendList.size()];
 // Data.fbFriendList is arraylist contains data
    public FriendListAdapter() {

        mInflater = LayoutInflater.from(mContext);
        Arrays.fill(isCheck, Boolean.FALSE);
    }

    @Override
    public int getCount() {
        return Data.fbFriendList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        View hView = convertView;
        if (convertView == null) {
            hView = mInflater.inflate(R.layout.friend_item, null);
            ViewHolder holder = new ViewHolder();
            holder.profile_pic = (ImageView) hView
                    .findViewById(R.id.profile_pic);
            holder.name = (TextView) hView.findViewById(R.id.name);
            holder.checkBox = (CheckBox) hView.findViewById(R.id.checkBox);
            hView.setTag(holder);
        }

        final ViewHolder holder = (ViewHolder) hView.getTag();

        if (isCheck[position]) {
            holder.checkBox.setChecked(true);
        } else {
            holder.checkBox.setChecked(false);
        }

        try {
            holder.profile_pic.setImageBitmap(Utility.model.getImage(
                    Data.fbFriendList.get(position).getFbFriendFBid(),
                    Data.fbFriendList.get(position)
                            .getFbFriendThumbImgUrl()));
            holder.name.setText(Data.fbFriendList.get(position)
                    .getFbFriendName());

        } catch (Exception e) {
            e.printStackTrace();
            holder.name.setText("");
        }

        holder.checkBox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (holder.checkBox.isChecked())
                    isCheck[position] = true;
                else
                    isCheck[position] = false;
            }
        });

        return hView;
    }

}

class ViewHolder {
    ImageView profile_pic;
    TextView name;
    CheckBox checkBox;
}

ここで isCheck[] は、チェックボックスのステータスを保持するために Adapter クラスで使用されるブール配列であり、Data.fbFriendList は配列リストです。

于 2012-05-25T06:21:45.793 に答える
0

その基本的なプロパティListView だけでなくcheckboxesEdittext実際other input controlsに起こっていることと同じ値を持ちますlist view

表示されているアイテムは作成されているだけです。

新しいアイテムscrollが作成されると、以前の表示状態に従って、チェック ボックスの 1 つが現在の表示用にチェックされます。 解決策1:チェックボックスのステータスを確認する呼び出し時にチェックボックスを作成し、リストに従ってそれらのチェックとチェックを外して 、listイベントがリスト内のチェックボックス(またはリストアイテム)の状態を変更するように作成して、この方法で解決策を取得できますstore the states of all checkboxes(or list items)bindview() methodcheckbox listeneroncheckchange

解決策 2:

チェックボックスが1つだけ必要な場合は、複数項目の選択を可能にするリストビュープロパティを使用できます

編集1:

このプロパティを設定します

android:choiceMode="multipleChoice"

あなたのためにその2

リンクをたどると、このプロパティ も表示されます

于 2012-05-25T06:23:13.817 に答える