Ver Mensaje Individual
  #1  
Viejo 17/01/16, 20:49:17
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
interrogacion Editar atributo de campo dentro de un ArrayAdapter

Invoco a @kriogeN y @mocelet !! jaja

Buenas tardes compañeros,

hace un tiempo me ayudásteis mucho en el hilo:

http://www.htcmania.com/showthread.php?t=1052875


Me han pedido un pequeño cambio pero me cuesta tanto que llevo todo el día modificando cosas y no logro hacerlo funcionar. El problema que encuentro es que tengo un custom ArrayAdapter, gracias al cual creo una línea con varios campos cada vez que el usuario pulsa un botón para añadir "Conceptos".

Todo esto se basa en algo que me enseñásteis, y es en el modelo vista controlador, así que tengo un xml que es el que modela los campos que se muestran, luego el adapter en sí que controla la lógica, y un array donde se contienen realmente los datos.

Esta es la parte donde se maneja el comportamiento de uno de los campos, el que contiene el nombre del concepto:

[php]final AutoCompleteTextView concepto = (AutoCompleteTextView) item.findViewById(R.id.conceptoId);
item.setTag(concepto);
concepto.setText(datos.get(pos).getNombre());
concepto.addTextChangedListener(new TextWatcher() {
@override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@override
public void afterTextChanged(Editable s) {
datos.get(pos).setNombre(concepto.getText().toStri ng());
if (datos.get(pos).getNombre().equals("")) {
if (datos.size() > 1) {
datos.remove(pos);
notifyDataSetChanged();
}
}
}
});
[/php]No tengo problemas en editar el adapter para manejar los datos como quiera, de hecho tengo un AutoCompleteTextView en uno de los campos y al seleccionar un item de la lista autocompleto otros campos recuperando datos de una base de datos. Sin embargo lo sé cómo actar sobre el campo en sí mismo.

Esta es la lógica que controla esto último

[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"))));
notifyDataSetChanged();
}

}
});

return(item);
}[/php]
Qué quiero conseguir:
Tras seleccionar uno de los items, y por tanto autocompleto otros datos, bloquear ese campo para que ya no sea editable.

He tratado en la parte del programa que véis al final hacer:

Código:
concepto.setEnabled(false);
Y funciona... pero me bloquea TODOS los campos de concepto, y no sé cómo aplicarlo sólamente a la línea que estoy editando y no a todos, es decir, poder diferenciar ese campo de ese mismo campo en otras "líneas", pero claro su "id" es el mismo porque en el XML sólo tengo la plantilla por así decirlo.

Agradezco de antemano cualquier ayuda

Última edición por Godlike Día 24/01/16 a las 16:36:52
Responder Con Cita