单击列表视图中包含的复选框时,无法选择整个项目

时间:2012-04-18 11:16:45

标签: android listview

我正在制作自定义列表视图

this is my apps screen shot

这是我的适配器类

public class MenubaseAdapter extends BaseAdapter {
private static ArrayList<MenuItem> searchMenuItemArraylist;
private LayoutInflater menuInflater;
public MenubaseAdapter( Context context,ArrayList<MenuItem> results) {
    searchMenuItemArraylist=results;
    menuInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return searchMenuItemArraylist.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

               iewHolder holder;
            if(convertView==null)
            {
                convertView=menuInflater.inflate(R.layout.menu_list, null);
                holder=new MenuViewHolder();

                holder.txtItemName=(TextView)convertView.findViewById(R.id.textView_menuitem);
                holder.txtItemPrice=(TextView)convertView.findViewById(R.id.textView_itemprice);
                holder.txtItemQty=(TextView)convertView.findViewById(R.id.TextView_itemQty);
                holder.selectChk=(CheckBox)convertView.findViewById(R.id.checkBox_menuchk);



                convertView.setTag(holder);
            }else {
                holder=(MenuViewHolder)convertView.getTag();
            }
            holder.txtItemName.setText(searchMenuItemArraylist.get(position).getMenuItemname());
            holder.txtItemPrice.setText(searchMenuItemArraylist.get(position).getMenuItemPrice());
            holder.txtItemQty.setText(searchMenuItemArraylist.get(position).getItemQty());
            holder.selectChk.setChecked(searchMenuItemArraylist.get(position).isSelected());
holder.selectChk.setOnClickListener(new OnClickListener() {

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

                        //how to select the listview item ?
                    }
                });

 return convertView;

        }

static class MenuViewHolder
{
    TextView txtItemName;
    TextView txtItemPrice;
    TextView txtItemQty;
    CheckBox selectChk;
}

}

现在我的问题是,当我点击食物菜单时,列表被选中并且复选框被选中。但是如果我只点击复选框,那么列表项将不会被提前选中。

1 个答案:

答案 0 :(得分:4)

要保留所选项目的轨道,请使用对象的一个​​临时arraylist或字符串的简单arraylist,您将在其中添加或删除所选项目。

例如

您有一个临时arraylist ArrayList<MenuItem> tempList;

现在使用getview方法,您将需要进行两项更改

  1. 检查天气当前对象是否在临时arraylist中。如果当前元素在临时数组列表中,则只需将复选框的状态设置为true,否则将其设置为false。
  2. 在复选框的onClick方法中,首先检查复选框的状态。如果选中该复选框,则只检查当前元素是否在temp arraylist中的天气,如果没有,则只需在arraylist中添加当前元素。如果未选中复选框的状态,则检查temp arraylist中的当前元素,如果存在于temp arraylist中,则将其从列表中删除,然后调用notifyDatasetChanged方法