Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #41  
Viejo 25/09/15, 14:17:57
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Para asegurarte que si el usuario apaga la pantalla cuando vuelva los datos sigan ahí la única manera es usar el Bundle de savedInstanceState.

En cuanto a las propiedades de clase, yo sólo las uso si necesito que 2 Activities compartan datos que no entran en un Intent.

Por ejemplo, tengo una aplicación que una de las Activities es una cámara en tiempo real donde puedes aplicar filtros, la imagen que capturas (ya con el filtro) tiene que pasar a otra Activity donde puedes añadirle más cosas y luego enviarla a un servidor.

Una imagen no entra en un Intent, si lo haces habrá móviles que funcionará bien, pero otros que la Activity dará excepción al abrirse. Por norma general no puedes pasar más de 1 MB en total en un Intent.

Así que lo que hago es almacenar los bytes de la imagen en una propiedad de clase, y la recupero en la otra Activity.
Responder Con Cita
Gracias de parte de:


  #42  
Viejo 27/09/15, 13:52:17
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Los ciclos de vida de las variables, objetos y actividades dan para escribir mucho...

A los reinicios solo sobrevive lo que esté almacenado en almacenamiento persistente (memoria interna), es decir, las SharedPreferences, las bases de datos SQLite o en general cualquier fichero que guardes por tu cuenta en la memoria interna y/o en la SD.

Los atributos de un objeto viven mientras viva el objeto. Los atributos estáticos no pertenecen a un objeto sino a la propia clase. Pueden haberse destruido todos los objetos (instancias) de una clase, que si había un valor estático, cuando crees otra instancia, ahí estará el valor salvo que la máquina virtual haya destruido todo para liberar recursos.

En Android además están los Bundles para guardar el estado de una actividad, o los Intent para pasar información entre actividades, aunque de forma limitada (y tampoco sobreviven a reinicios)

Usar valores estáticos es, como decía kriogeN, una opción que está ahí, si se usa bien no hay por qué no usarla. De hecho a Diana Hackborn (una de las ingenieras de Android) le encantan para todo lo que sea compartir datos comunes entre actividades. Yo lo uso para compartir un socket entre actividades, si bien es precisamente uno de los casos delicados (tengo bastante cuidado de llevar la cuenta de qué actividades lo están usando para cerrarlo cuando no hay ninguna).

En cualquier caso, nadie te garantiza que cuando el usuario vuelva a la aplicación sigan estando los datos. Para situaciones de se apaga la pantalla y vuelve en un rato, lo normal es que sí. Si el usuario sale de la app, se pone a hacer otras cosas, le llaman, juega a algo, y vuelve... ya depende.
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Para asegurarte que si el usuario apaga la pantalla cuando vuelva los datos sigan ahí la única manera es usar el Bundle de savedInstanceState.

En cuanto a las propiedades de clase, yo sólo las uso si necesito que 2 Activities compartan datos que no entran en un Intent.

Por ejemplo, tengo una aplicación que una de las Activities es una cámara en tiempo real donde puedes aplicar filtros, la imagen que capturas (ya con el filtro) tiene que pasar a otra Activity donde puedes añadirle más cosas y luego enviarla a un servidor.

Una imagen no entra en un Intent, si lo haces habrá móviles que funcionará bien, pero otros que la Activity dará excepción al abrirse. Por norma general no puedes pasar más de 1 MB en total en un Intent.

Así que lo que hago es almacenar los bytes de la imagen en una propiedad de clase, y la recupero en la otra Activity.

Muchísimas gracias a ambos, es impresionante lo que sabéis y la de tiempo que ahorráis, porque de otra manera tocaría probarlo y al dar error ir cambiando... tengo un curso pagado en Udemy que quiero hacer pero no he tenido tiempo ya que esta aplicación era urgente y ya que dije que la haría estoy comprometido...

Además es genial poder saber para qué sirven por ejemplo los Bundles, en el sentido de poder diferenciarlos de otros tipos de salvado. Creo que por el momento me sirve con lo que estoy usando, ya que cada vez que se haga un nuevo Parte reescribiré todas estas variables y sería difícil mezclar datos, y por otro lado, quitando los casos de minimizar y maximizar (suspender y resumen) no necesito almacenar datos ya que al ser un parte de trabajo se irá rellenando sin muchos parones.

Me ha gustado lo de que Diana Hackborn lo utilice, siempre da más tranquilidad jajaja.

Muchísimas gracias, voy a tratar de recuperar y almacenar correctamente la lista de Conceptos, el siguiente "reto" es saber linkarlo con el id de parte correcto y con el propio id del producto.

Un saludo!!
Responder Con Cita
  #43  
Viejo 27/09/15, 20:09:52
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
Buenas!!

Parece que va saliendo, encontré un problema y es que puse un autoComplete en un campo de la lista y al seleccionar el dato se debían rellenar los campos de esa fila, pero se rellenaban siempre los de la primera fila. Mirando mirando he encontrado un fallo muy tonto y es que tenía duplicada la variable "position".

En fin, ahora todo tiene mejor aspecto, pero hay algo que me está volviendo loco.

Yo tengo un ConceptoAdapter donde hay entre otras cosas, el getView donde defino el remove de una fila:

[php]View removeButton = item.findViewById(R.id.delId);

removeButton.setOnClickListener(new View.OnClickListener() {
@override
public void onClick(View v) {
datos.remove(pos);
notifyDataSetChanged();
}
});[/php]Como me indicásteis además ahora lo aprovecho para el guardar automático tras escribir en los campos. Sin embargo no es desde aquí que añado filas... con tantos frentes acabo de darme cuenta, ahora que todo funciona, de que no sé cuál es el ArrayList que contiene realmente los datos!!.

La duda es porque en el Adapter se define:

[php]private final ArrayList <Producto> datos;[/php]Pero desde la Activity donde hago todo tengo definidos:

[php]ArrayList <Producto> conceptos = new ArrayList<Producto>();
ConceptoAdapter myAdapter;[/php]Y la función
[php]public void addConcepto (View view) {
Producto myProducto = new Producto();
conceptos.add(myProducto);

myAdapter.notifyDataSetChanged();
}[/php]He probado a crear esta función dentro del Adapter, parece más lógico ya que es allí donde elimino la información del Array:

[php]
View addButton = item.findViewById(R.id.addConcepto);
addButton.setOnClickListener(new View.OnClickListener() {
@override
public void onClick(View v) {
Producto producto = new Producto();
datos.add(producto);
notifyDataSetChanged();
}
});[/php]Y sin embargo así no ocurre nada!!

Aquí es donde, en el Activity, se aplica el Adapter:

[php]myAdapter = new ConceptoAdapter (this, conceptos);
listView = (ListView) findViewById(R.id.listConceptos);
listView.setAdapter(myAdapter);[/php]

¿Se carga el constructor al hacer el notifyDataSetChanged()? Porque de otra forma no entiendo cómo el Array del Adapter, donde se hace en el constructor la asignación, vuelve a tener esta información actualizada :S

Me surjen dos preguntas... primero, por qué no se añaden los datos y muestran? (he probado incluso dejando la función addConcepto del Activity y que simplemente haga el myAdapter.notifyDataSetChanged(), sin éxito). Y segundo, ¿dónde tengo realmente los datos? me he puesto hasta de mala leche por no haber caído en que estoy creando un ArrayList <Producto> concepto. Es decir un array de productos que se llama concepto, y aunque los Concepto son similares al Producto, en realidad quiero que Producto sea como una referencia de productos disponibles, y conceptos son los productos que asigno en un Parte de trabajo, la diferencia es que un concepto puede ser un Producto con precio modificado, por ejemplo, además de estar repetido.

Básicamente lo que quiero es guardar ahora en la base de datos este ArrayList de productos pero como Concepto (son menos campos y cuenta con referencias de ID a Parte y Producto), pero para empezar creo que habré de crear un campo aunque sea oculto con el ID del producto...

Espero que se entienda algo, de todas formas voy a seguir mirando a ver si me aclaro, gracias de antemano!!

Última edición por Godlike Día 27/09/15 a las 20:16:21.
Responder Con Cita
  #44  
Viejo 27/09/15, 21:00:17
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Al final me voy a liar yo también

¿Ese "datos" es sólo una referencia, no? Supongo que lo creaste para tener la referencia al array en el adapter. Si en algún sitio hay un "datos = new ArrayList...", te sobra, solo tiene que haber un objeto ArrayList que modele los datos asociados a la vista.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #45  
Viejo 28/09/15, 19:43:25
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Al final me voy a liar yo también

¿Ese "datos" es sólo una referencia, no? Supongo que lo creaste para tener la referencia al array en el adapter. Si en algún sitio hay un "datos = new ArrayList...", te sobra, solo tiene que haber un objeto ArrayList que modele los datos asociados a la vista.
Jajaja perdona! es que la verdad lo he armado un lío.

Mira, los datos en el Adapter:

[php]private final ArrayList <Producto> datos;

public ConceptoAdapter (Context context, ArrayList<Producto> datos){
super(context, R.layout.activity_parte_tecnico_each, R.id.fakeText, datos);
this.datos = datos;
}[/php]Por lo que creo que es correcto recibir este Array en el constructor y emplearlo en el adapter... lo que no comprendo es que si cada vez que añado una fila lo hago desde la Activity principal al Array del activity, por qué el adapter tiene esos datos? si el constructor solo se llama una vez al comienzo!

Aparte de eso, que funciona pero me gustaría saber por qué he hecho lo siguiente, a ver si lo explico sin liarlo tanto como anteriormente...

- Producto contiene la información de los productos disponibles, pongamos Actualizar software, con su id, una referencia, un precio, etc.

- Concepto debe ser similar, aunque tiene menos campos, porque una vez listo los productos disponibles, el técnico selecciona la Act. de software por ejemplo, pero puede variar el precio para ese caso en concreto, así que al guardarse deberá tener en la base de datos (y así está pensada la estructura del SQLite) un id propio, el id del parte al que se le asigna, el id del producto original (de forma que se sabe qué producto es) y un campo precio y nombre, que pueden ser o no los mismo que el producto original (me lo pdien así).

Ahora, como todo el rato trato con ArrayList de <Producto>, se hacen las modificaciones pertinentes y se guardan y sigue siendo un Producto, así que una vez finalizado el parte, al pulsar para mostrar la siguiente Activity (que es como un resumen que muestra datos) hago lo siguiente:

[php]
ArrayList <Concepto> conceptosFinal = new ArrayList<>();
[/php]</span>
[php]
final MySQLiteHelper db = new MySQLiteHelper(getApplicationContext());
int lastParte = db.getLastParte();
int currentParte = lastParte + 1;
//Parsing Productos to Conceptos and save ArrayList Conceptos in Globals
ListIterator <Producto> iterProducto = conceptos.listIterator();
if(iterProducto.hasNext()){
Producto currentProducto = iterProducto.next();
Concepto currentConcepto = new Concepto();
//Saving original Producto as Concepto with possible changes
currentConcepto.setId_producto(currentProducto.get Id());
currentConcepto.setNombre(currentProducto.getNombr e());
currentConcepto.setPrecio(currentProducto.getPreci o_publico());
currentConcepto.setId_parte(currentParte);


conceptosFinal.add(currentConcepto);}[/php]Y con esto pretendo crearme un ArrayList de Concepto, que básicamente serán los productos modificados, y con un id de los productos originales y otro id del parte (que por cierto como aún no está generado lo calculo como último parte introducido+1).


Tengo la sensación de hacer todo un poco a lo loco, pero para mi tiene sentido

Lo otro que comentadaba y que lié tanto era que el borrar líneas lo hago desde el adapter, eliminando los datos del array, sin embargo para crear hago un "add" al ArrayList del Activity, no entiendo por qué luego el Adapter tiene esos datos!

Gracias por todo, de verdad!
Responder Con Cita
  #46  
Viejo 28/09/15, 20:07:39
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Cuando haces this.datos=datos en el constructor se copia la referencia al objeto, no su valor (si fuera un tipo primitivo como un int, no). Sólo hay un ArrayList, accesible desde distintas variables.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #47  
Viejo 28/09/15, 20:58:49
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Cuando haces this.datos=datos en el constructor se copia la referencia al objeto, no su valor (si fuera un tipo primitivo como un int, no). Sólo hay un ArrayList, accesible desde distintas variables.
Joder, en serio!? y sin puntero ni nada? XD

Ves muy lioso lo demás o parece correcto?

Gracias!!
Responder Con Cita
  #48  
Viejo 28/09/15, 21:57:46
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

 Cita: Originalmente Escrito por Godlike Ver Mensaje
Joder, en serio!? y sin puntero ni nada? XD
Realmente en Java todo se pasa por valor, no existe el paso por referencia ni los punteros. Lo que ocurre es que el valor de una variable cuando se trata de objetos es una referencia, nunca "el objeto" El objeto no se almacena en ninguna variable, se almacena donde le parezca bien a la máquina virtual de Java. Lo que tienes es una referencia para que uses el objeto.

Me explico, cuando haces "new algo" te devuelve una referencia al nuevo objeto, no el objeto. Cuando lo asignas a otra variable estás copiando el valor de esa variable, es decir, copias una referencia a cierto objeto, pero el objeto sigue estando en el mismo sitio. Al objeto sin su referencia no puedes acceder, y en Java no puedes acceder directamente a la memoria como en C, por lo que los punteros no tienen sentido.

Por eso tampoco hace falta un destructor explícito, cuando un objeto no tiene referencias pasa el recolector de basura y lo borra de memoria porque ya nadie va a poder acceder a él.

En los tipos primitivos, por ejemplo int x = 5, igualmente se copia el valor, y el valor es ya el número. De hecho no existe el paso por referencia, nuevamente porque no hay punteros. Si luego haces int y = x, y valdrá 5, pero si luego haces y = 7, x seguirá valiendo 5. No existe ningún mecanismo para que dos variables compartan el mismo valor en memoria, son copias separadas siempre.

En tu caso, datos y la otra variable almacenan las dos el mismo valor, la referencia a cierto objeto, pero si en algún momento le asignas otro valor a cualquiera de las dos variables ya no estarán refiriéndose al mismo objeto (fuente habitual de fallos por cierto).

Bueno, perdón por la extensión, a veces me sale la vena docente jajaja

Sobre los conceptos y productos no me he enterado del todo, pero eso del +1 suena muy extraño... (Edito: en tapatalk sólo veía un chorizo de código, formateado en la web queda mejor me uno al comentario de kriogeN, los iteradores son de la década pasada)
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!

Última edición por mocelet Día 29/09/15 a las 08:49:54.
Responder Con Cita
Gracias de parte de:
  #49  
Viejo 28/09/15, 22:11:46
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
¿Aún hay gente que usa iteradores? Yo pensaba que ya hasta daban error de compilación

for (Producto iterProducto : conceptos) {
}

Más limpio imposible.
Responder Con Cita
Gracias de parte de:
  #50  
Viejo 29/09/15, 09:03:56
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Realmente en Java todo se pasa por valor, no existe el paso por referencia ni los punteros. Lo que ocurre es que el valor de una variable cuando se trata de objetos es una referencia, nunca "el objeto" El objeto no se almacena en ninguna variable, se almacena donde le parezca bien a la máquina virtual de Java. Lo que tienes es una referencia para que uses el objeto.

Me explico, cuando haces "new algo" te devuelve una referencia al nuevo objeto, no el objeto. Cuando lo asignas a otra variable estás copiando el valor de esa variable, es decir, copias una referencia a cierto objeto, pero el objeto sigue estando en el mismo sitio. Al objeto sin su referencia no puedes acceder, y en Java no puedes acceder directamente a la memoria como en C, por lo que los punteros no tienen sentido.

Por eso tampoco hace falta un destructor explícito, cuando un objeto no tiene referencias pasa el recolector de basura y lo borra de memoria porque ya nadie va a poder acceder a él.

En los tipos primitivos, por ejemplo int x = 5, igualmente se copia el valor, y el valor es ya el número. De hecho no existe el paso por referencia, nuevamente porque no hay punteros. Si luego haces int y = x, y valdrá 5, pero si luego haces y = 7, x seguirá valiendo 5. No existe ningún mecanismo para que dos variables compartan el mismo valor en memoria, son copias separadas siempre.

En tu caso, datos y la otra variable almacenan las dos el mismo valor, la referencia a cierto objeto, pero si en algún momento le asignas otro valor a cualquiera de las dos variables ya no estarán refiriéndose al mismo objeto (fuente habitual de fallos por cierto).

Bueno, perdón por la extensión, a veces me sale la vena docente jajaja

Sobre los conceptos y productos no me he enterado del todo, pero eso del +1 suena muy extraño... (Edito: en tapatalk sólo veía un chorizo de código, formateado en la web queda mejor me uno al comentario de kriogeN, los iteradores son de la década pasada)
De perdón nada, me encanta aprender y dado el poquísimo tiempo que tengo, mucho mejor si me lo contáis así, vaya tela que me hago mayor por culpa de la programación jaja, me quedé en C y sus punteros!.

Está explicado perfectamente, es decir que las "cajas" de las variables, cuando no se trata de tipos primitivos, contienen referencias siempre. Lo único que no me queda claro es cuando dices que si le asignas otro valor ya no se refieren al mismo objeto... te refieres si le asginas otro valor del tipo otro objeto, no? es decir que apuntaría a otro objeto, pero no si usas métodos del objeto al que apunta (add, remove del ArraList, ó setNombre de un objeto, etc.), verdad?.

Con respecto a lo otro siento liarte tanto!

La cosa es que los productos son fijos, es decir tengo unos productos con una serie de valores... de esa tabla obtengo los datos, el usuario selecciona el que quiere, y hay dos campos (nombre y precio) que son variables, así que al guardarlos almaceno la id del producto para tener todos los campos "originales" y además tengo los dos campos que se han modificado, con lo cual pasa de un ArrayList <Producto> a un ArrayList <Concepto>, de ahí que haga el lío ese de recorrer un Array e ir creando un Array de Concepto, no sé cómo lo ves.

Pero además, si añado 10 conceptos por ejemplo, todos ellos pertenecen a un parte de trabajo (tú vienes a mi empresa y me facturas 10 tareas realizadas), pero el parte no tiene ID en la base de datos hasta que lo guardo finalmente, así que lo que hago es buscar el último ID de parte, lo incremento en 1, y ese es el ID que asigno a cada concepto (en su campo de referencia id_parte) y al guardar el parte pretendo forzar el uso de ese ID (puedo añadir alguna comprobación como ver si ese ID está en uso).

Espero haberlo explicado mejor

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
¿Aún hay gente que usa iteradores? Yo pensaba que ya hasta daban error de compilación

for (Producto iterProducto : conceptos) {
}

Más limpio imposible.

Ui ui qué bonito se ve! con esto estaría indicando que para cada elemento en Producto (iterProducto) tengo una variable conceptos, que es qué? mi Array original o el de "destino"? no había visto este tipo de código! mira que leo en webs y solo he encontrado lo de los iteradores, es mejor así además de más limpio?

Gracias a ambos!
Responder Con Cita
  #51  
Viejo 29/09/15, 09:17:19
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Significa que tienes un contenedor (List, ArrayList, etc) que se llama "conceptos", que los elementos que contiene son Producto. Haciendo eso iteras todos los elementos del contenedor.

List<Producto> conceptos;
.......
for (Producto p : conceptos) {
//Recorre todos los elementos Producto que hay en conceptos, almacenando cada iteración en la variable p
}
Responder Con Cita
Gracias de parte de:
  #52  
Viejo 29/09/15, 09:19:34
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Significa que tienes un contenedor (List, ArrayList, etc) que se llama "conceptos", que los elementos que contiene son Producto. Haciendo eso iteras todos los elementos del contenedor.

List<Producto> conceptos;
.......
for (Producto p : conceptos) {
//Recorre todos los elementos Producto que hay en conceptos, almacenando cada iteración en la variable p
}
Genial! entonces me faltaría definir el Array de Concepto que hará de destino, verdad? (siento el lío porque "conceptos" en realidad es un array de Producto, tengo que cambiar todo esto XD).

Gracias! a ver si la termino esta semana, la versión alpha al menos, y puedo ponerme con el curso de Udemy que compré.
Responder Con Cita
  #53  
Viejo 29/09/15, 09:44:49
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

 Cita: Originalmente Escrito por Godlike Ver Mensaje
Lo único que no me queda claro es cuando dices que si le asignas otro valor ya no se refieren al mismo objeto... te refieres si le asginas otro valor del tipo otro objeto, no? es decir que apuntaría a otro objeto, pero no si usas métodos del objeto al que apunta (add, remove del ArraList, ó setNombre de un objeto, etc.), verdad?.
Exacto, asignar un valor es poner "=". Llamar a métodos del objeto referenciado no cambia el valor de la referencia.

EDITO:
 Cita: Originalmente Escrito por Godlike Ver Mensaje
Genial! entonces me faltaría definir el Array de Concepto que hará de destino, verdad? (siento el lío porque "conceptos" en realidad es un array de Producto, tengo que cambiar todo esto XD).

Gracias! a ver si la termino esta semana, la versión alpha al menos, y puedo ponerme con el curso de Udemy que compré.
En realidad sería
Código:
for (Producto currentProducto : conceptos) {
   // y aquí lo mismo que hacías antes desde currentConcepto = new ...
}
Que es lo mismo que usar un iterador pero te evitas definir el iterador (borra iterProducto), las llamadas al hasNext y al next. El caso es que tu código no recorre todos porque no hay ningún bucle, pero si la idea es recorrerlos todos el for es lo mejor.

Y sí, cambia los nombres para no liarte jeje
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!

Última edición por mocelet Día 29/09/15 a las 09:57:03.
Responder Con Cita
Gracias de parte de:
  #54  
Viejo 29/09/15, 10:12:43
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Exacto, asignar un valor es poner "=". Llamar a métodos del objeto referenciado no cambia el valor de la referencia.

Gracias!! he estado mirando tus apps, la de enciende la navidad me mola especialmente, la pruebo y te doy 5 stars!. Por cierto, eres profe?


Tenéis una idea muy aproximada de cuánto se cobra por un app como la que estoy haciendo? Mi idea es que si se cobra de 3 a 5 mil euros, por ejemplo, pedirle unos 600, porque he tardado mucho (me la pidió en Navidad), soy novato y me está sirviendo para aprender. Seguiré modificándola y eso ya podemos ver si gratis o no, pero como alguien como vosotros haría toda la app mejor, quiero pedirle bastante menos, pero es que no sé si algo así se cobra 5 mil o mil, o... ni idea.

Última edición por Godlike Día 29/09/15 a las 11:24:35.
Responder Con Cita
  #55  
Viejo 29/09/15, 10:14:41
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Exacto, asignar un valor es poner "=". Llamar a métodos del objeto referenciado no cambia el valor de la referencia.

EDITO:


En realidad sería
Código:
for (Producto currentProducto : conceptos) {
   // y aquí lo mismo que hacías antes desde currentConcepto = new ...
}
Que es lo mismo que usar un iterador pero te evitas definir el iterador (borra iterProducto), las llamadas al hasNext y al next. El caso es que tu código no recorre todos porque no hay ningún bucle, pero si la idea es recorrerlos todos el for es lo mejor.

Y sí, cambia los nombres para no liarte jeje

Ostras no tengo bucle! jaja, lo escribí y no lo testeé, a ver si saco un rato y lo modifico, me ha quedado todo claro!

Gracias
Responder Con Cita
  #56  
Viejo 31/10/15, 17:56:01
Array

[xs_avatar]
Godlike Godlike no está en línea
Miembro del foro
 
Fecha de registro: jul 2015
Mensajes: 101
Modelo de smartphone: LG G5
Tu operador: Vodafone
Sólamente escribo para agradecer vuestra inestimable ayuda, ya está funcionando correctamente, y la aplicación a falta de una cosa que ahora consultaré en un post está finalizada.

De hecho tras tener todo esto me di cuenta de que estaba utilizando productos y conceptos cuando me bastaba con utilizar conceptos y los productos sólo para los desplegables.

En fin, que no sólo me ahorrásteis tiempo sino que me habéis ayudado a aprender más.

Muchas gracias!!
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:17:13 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /