Ver Mensaje Individual
  #7  
Viejo 22/01/16, 13:48:59
Avatar de Godlike
Godlike Godlike no está en línea
Miembro del foro
Mensajes: 101
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por mocelet Ver Mensaje
Creo que ya hablamos de lo mismo. El evento desencadena la acción de autocompletado y desactiva una serie de campos, ¿no?

En vez de buscar la vista directamente y cambiarla, añade en algún sitio a los datos que ciertos atributos no pueden cambiarse porque han sido autogenerados. Así cuando la lista se refresque con el notifyDataSetChanged (y se llame al getView de cada fila) ya sabes para cada fila qué hay que tener activado o desactivado.

Si actualizas la vista "a pelo" pero no guardas nada en ningún sitio, con que el usuario haga scroll y se recicle una fila ya se ha liado porque pierdes el estado y aparecerán campos deshabilitados que no deberían y viceversa. El enabled a true o false de las cosas que puedan cambiar hazlo en el getView.

Ahora si que entiendo a lo que te refieres!

Me he puesto a ello, te comento los cambios:

Al objecto "Concepto" le he añadido un par método como el que comentabas

[php]//Others
public boolean getAutocompleted (){
return this.autoGenerated;
}
public void setAutocompleted (boolean estado){
this.autoGenerated = estado;
}[/php]
Luego en el adapter lo que tengo es
[php]
private final ArrayList <Concepto> datos;[/php]
De forma que una vez clica el usuario sobre un elemento del AutoCompleteTextView...
[php]
//Catch selected producto to fill details
concepto.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@override
//ATTENTION: This position variable can easily confuse with the main one. "pos" is the position from main getView, "position" is the relative to this function
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Getting the selected item to seek for other information of the producto
String producto = adapter.getItem(position);

//Log.d(TAG, "Estoy dentro del click!!");

Cursor cursorProducto = db.getFromProducto(producto);

if (cursorProducto != null && cursorProducto.moveToFirst()) {
datos.get(pos).setId(Integer.parseInt(cursorProduc to.getString(cursorProducto.getColumnIndex("id"))) );
datos.get(pos).setCantidad(1);
datos.get(pos).setNombre(cursorProducto.getString( cursorProducto.getColumnIndex("nombre")));
datos.get(pos).setDescripcion(cursorProducto.getSt ring(cursorProducto.getColumnIndex("nombre"))); //Copying nombre to descripcion by default
datos.get(pos).setPrecio(Double.parseDouble(cursor Producto.getString(cursorProducto.getColumnIndex(" precio_publico"))));
datos.get(pos).setAutocompleted(true);
notifyDataSetChanged();
}

}
});

[/php]


Donde se ve que hago datos.get(pos).setAutocompleted(true);

La declaración del getView es esta:

[php]public View getView(final int position, View convertView, ViewGroup parent){[/php] Bueno pues aunque a continuación, o fuera del setOnItemClickListener (pero aún dentro del getView) haga:

[php]View row = convertView;
if (datos.get(pos).getAutocompleted)
row.setEnabled(false);
[/php]


No sucede nada, no crashea pero no hace nada de lo que debería hacer... algo se me escapa, ¿podrías echarme una mano por favor? Te lo agradezco muchísimo.

Un saludo!
Responder Con Cita