Ciao a tutti,
ho un problema con una listview con customadapter dove ogni row contiene una checkbox e un edittext.
il problema è nell'edittext, qualcosa mi sfugge.
in pratica scrollando la lista non perde la posizione.
questo è il customAdapter che sto utilizzando al momento.
quale potrebbe essere il problema della perdita di posizione?
codice:
public class CustomAdapter extends ArrayAdapter<Articolo>{
public CustomAdapter(Context context, int textViewResourceId, List list) {
super(context, textViewResourceId, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getViewOptimize(position, convertView, parent);
}
public View getViewOptimize(int position, View convertView, ViewGroup parent) {
//articoli da visualizzare
final Articolo a = getItem(position);
TextView codice;
TextView marca;
TextView prezzo;
CheckBox checkbox;
EditText quanti;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.buy_row_prodotto, null);
// Find the child views.
checkbox= (CheckBox)convertView.findViewById(R.id.checkBox1);
codice = (TextView)convertView.findViewById(R.id.codice);
marca = (TextView)convertView.findViewById(R.id.marchio);
prezzo = (TextView)convertView.findViewById(R.id.prezzo);
quanti = (EditText)convertView.findViewById(R.id.quantita);
// Optimization: Tag the row with it's child views, so we don't
// have to
// call findViewById() later when we reuse the row.
convertView.setTag(new ViewHolder(codice, marca, prezzo, quanti, checkbox));
// If CheckBox is toggled, update the planet it is tagged with.
checkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
Articolo a = (Articolo) cb.getTag();
a.setChecked(cb.isChecked());
}
});
quanti.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
final int position = v.getId();
final EditText Quanti = (EditText) v;
a.setQuanti(Quanti.getText().toString());
}
});
} else {
// Because we use a ViewHolder, we avoid having to call
// findViewById().
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
checkbox = viewHolder.getCheckBox();
codice = viewHolder.getCodice();
marca = viewHolder.getMarca();
prezzo = viewHolder.getPrezzo();
quanti = viewHolder.getQuantita();
}
// Tag the CheckBox with the Planet it is displaying, so that we can
// access the planet in onClick() when the CheckBox is toggled.
checkbox.setTag(a);
// Display planet data
checkbox.setChecked(a.isChecked());
codice.setText(a.getCodice()+" - "+a.getDesweb());
marca.setText(a.getMarca()+" - "+a.getUnimis()+" - Ultima giac.:"+a.getQttgia());
prezzo.setText(a.getPrezzo()+" € ");
//Fill EditText with the value you have in data source
quanti.setText(a.getQuanti());
return convertView;
}
private class ViewHolder {
public TextView codice;
public TextView marca;
public TextView prezzo;
public EditText quantita;
public CheckBox checkbox;
public ViewHolder(){}
public ViewHolder(TextView codice, TextView marca, TextView prezzo, EditText quantita, CheckBox checkbox) {
this.codice = codice;
this.marca = marca;
this.prezzo = prezzo;
this.quantita= quantita;
this.checkbox = checkbox;
}
public CheckBox getCheckBox() {
return checkbox;
}
public void setCheckBox(CheckBox checkBox) {
this.checkbox = checkBox;
}
public TextView getCodice() {
return codice;
}
public void setCodice(TextView codice) {
this.codice = codice;
}
public TextView getMarca() {
return marca;
}
public void setMarca(TextView marca) {
this.marca = marca;
}
public TextView getPrezzo() {
return prezzo;
}
public void setPrezzo(TextView prezzo) {
this.prezzo = prezzo;
}
public EditText getQuantita() {
return quantita;
}
public void setQuantita(EditText quantita) {
this.quantita = quantita;
}
}
}