3

在我的应用程序中,我正在选择要订购的商品。我的问题是如果我选中要订购的复选框,甚至还选中了另一个复选框。意味着如果我选择单个 Item ,则会检查两个 Item。

从 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

根据 listview 的行为,它不会在滚动时间 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 它不仅是一个基本属性,checkboxes而且将具有Edittextother input controls实际发生的相同的价值list view

仅创建正在显示的项目。

当您scroll创建新项目时,将根据先前的显示状态检查复选框以查看当前显示。 解决方案1: 创建一个list在其中store the states of all checkboxes(or list items)和调用bindview() method检查复选框的状态并根据列表检查和取消选中它们也创建checkbox listener以便oncheckchange事件更改列表中复选框(或列表项)的状态,这样您就可以获得解决方案

解决方案2:

如果您只需要一个复选框,那么您可以使用启用多项选择的 listview 属性

编辑1:

设置此属性

android:choiceMode="multipleChoice"

对你来说 2

点击链接查看此属性

于 2012-05-25T06:23:13.817 回答
0

您必须保存所有复选框的状态并相应地恢复它们。这是我已经发布的示例。如果您遇到任何问题,请告诉我。我会尽力帮助你。

检查此链接

如何实现一个获取所有复选框状态并将选中项的值添加到arraylist的按钮?

于 2012-05-25T06:44:10.150 回答