2015-10-14 2 views
0

У меня есть проблема с пользовательским адаптером с помощью CheckBox. При щелчке я создаю массив, содержащий некоторые данные, и это работает отлично, но в моем держателе есть также «поле», которое содержит число, и я хотел бы поместить это число и в конечном итоге добавить его к предыдущему выбору, если пользователь проверяет больше строк списка. «holder.durata» содержит тот номер, который я должен использовать. Может кто-то помогает мне это сделать? Вот мой адаптерПользовательский адаптер, значение суммы на CheckBox click

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; 
} 
+1

это [ссылка] (http://stackoverflow.com/questions/10911361/how-to-get-selected-list-items-from-a-listview-with-checkbox-and-custom-adapter) может помочь вам – pRaNaY

+0

@pRaNaY Спасибо, я так думаю, но я должен изучить его раньше! Я попытаюсь адаптировать этот пример. – Jayelef

+0

@pRaNaY может быть, похоже, что я хочу сделать, но я не могу применить этот пример, чтобы решить мою проблему. У меня уже есть массив (это list_selected): могу ли я суммировать элементы, называемые «Durata_m»? Есть способ сделать это? – Jayelef

ответ

0

решаемые

Я не знаю, если это правильно, но это работает должным образом, и я надеюсь, что кому-то помочь с той же проблемой. Используя мой 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); 
        } 
Смежные вопросы