【发布时间】:2016-01-12 21:43:52
【问题描述】:
我对使用 CheckBox 的自定义适配器有一些问题。单击时,我创建了一个包含一些数据的数组,这非常有效,但是在我的持有人中还有一个包含数字的“字段”,如果用户检查,我应该输入这个数字并最终将其添加到先前的选择中更多行列表视图。 '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;
}
【问题讨论】:
-
这个link可以帮助你
-
@pRaNaY 谢谢,我想是的,但我必须先研究一下!!我会尝试修改这个例子。
-
@pRaNaY 也许它看起来像我想要做的,但我无法应用这个例子来解决我的问题。我已经有一个数组(它是 list_selected):我可以对名为“Durata_m”的元素求和吗?有办法做到这一点吗?