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