Android 自定义适配器,复选框上的和值单击

Android 自定义适配器,复选框上的和值单击,android,custom-adapter,Android,Custom Adapter,我对使用复选框的自定义适配器有一些问题。单击后,我创建了一个包含一些数据的数组,这非常有效,但在我的持有者中还有一个包含数字的“字段”,如果用户检查listview中的更多行,我应该把这个数字放到上一个选择中,并最终将其添加到上一个选择中。”holder.durata'包含我应该使用的号码。有人能帮我吗? 这是我的适配器 public class NuovoAdapter extends BaseAdapter { private LayoutInflater layoutinflater;

我对使用复选框的自定义适配器有一些问题。单击后,我创建了一个包含一些数据的数组,这非常有效,但在我的持有者中还有一个包含数字的“字段”,如果用户检查listview中的更多行,我应该把这个数字放到上一个选择中,并最终将其添加到上一个选择中。”holder.durata'包含我应该使用的号码。有人能帮我吗? 这是我的适配器

public class NuovoAdapter extends BaseAdapter {

private LayoutInflater layoutinflater;
private Context context;
ArrayList<HashMap<String, String>> dataList;
ArrayList<HashMap<String,String>> list_selected;
boolean [] itemChecked;
boolean[] checkBoxState;



public NuovoAdapter(Context context, ArrayList<HashMap<String, String>> list_serv)  {
    super();
    this.context = context;
    this.dataList = list_serv;
    itemChecked = new boolean [dataList.size()];
    list_selected = new ArrayList<HashMap<String, String>>();
    checkBoxState=new boolean[dataList.size()];
    list_selected.clear();


}
@Override
public int getCount() {
    return dataList.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) {
    final ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    if (convertView == null) {

        convertView = inflater.inflate(R.layout.prenota_serv, null);
        holder = new ViewHolder();

        holder.id = (TextView) convertView.findViewById(R.id.et_id);
        holder.service = (TextView) convertView.findViewById(R.id.et_serv);
        holder.costo = (TextView) convertView.findViewById(R.id.et_costo);
        holder.durata = (TextView) convertView.findViewById(R.id.et_dur);
        holder.Ceck = (CheckBox) convertView.findViewById(R.id.checkBox);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }


    holder.id.setText(dataList.get(position).get("ID"));
    holder.service.setText(dataList.get(position).get("Descrizione"));
    holder.costo.setText(dataList.get(position).get("Costo"));
    holder.durata.setText(dataList.get(position).get("Durata_m"));
    //holder.Ceck.setChecked(false);
    holder.Ceck.setChecked(checkBoxState[position]);


    holder.Ceck.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if(((CheckBox)v).isChecked())
                checkBoxState[position]=true;
            else
                checkBoxState[position]=false;

        }
    });




     holder.Ceck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                                     boolean isChecked) {
            HashMap<String, String> data = dataList.get(position);
            if (isChecked) {
                addToSelected(data);
            } else {
                removeSelected(data);
            }
        }

   });

    return convertView;

}
private void addToSelected(HashMap contact){
    if(!list_selected.contains(contact))list_selected.add(contact);

}
private boolean removeSelected(HashMap contact){
    return list_selected.remove(contact);
}
public ArrayList<HashMap<String, String>> getSelectedItems(){
    return list_selected;
}

}

class ViewHolder {
TextView id;
TextView service;
TextView costo;
TextView durata;
CheckBox Ceck;
 }
解决

我不知道它是否正确,但它工作正常,我希望能帮助有同样问题的人。使用我的CustomAdapter,我已经有了一个数组,每当用户选中复选框时,它都会存储数据。在我的活动中,我已转换为“Int value”,这是唯一的键“Durata_m”,并使用循环将其添加。如果有人能做得更好,我们将不胜感激。下面是代码

            Button bSend = (Button) findViewById(R.id.btnSend);
        bSend.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ArrayList<HashMap<String,String>> list_selected = adapter.getSelectedItems();
                int HourVal = 0;

                for (HashMap<String, String> map : list_selected)
                    for (Map.Entry<String, String> mapEntry : map.entrySet())
                    {

                        switch (mapEntry.getKey()){
                            case("Durata_m"):
                                HourVal = HourVal + Integer.parseInt(mapEntry.getValue().toString());

                        }
                        System.out.println("TOTAL MINUTES: " + HourVal);
                    }

这可能会有帮助you@pRaNaY谢谢,我想是的,但我必须先研究一下!!我将尝试改编这个例子。@pRaNaY也许这看起来像我想做的,但我无法应用这个例子来解决我的问题。我已经有了一个数组,它的列表被选中了:我可以对名为'Durata_m'的元素求和吗?有办法做到这一点吗?