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
  #1  
Viejo 10/01/16, 11:19:23
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
Imagenes

Veran tengo un problema con las imagenes, cuando habro el activiti todo se ve perfectamente, pero las imagenes que estan por debajo de la pantalla, osea las que en un principio estan al final de la lista, al mover la lista hacia arriba salen cambiandose unas entre otras, y al volver a desplazar al principio de la lista tambien, las que no se ven, tambien, no se si me explico. Es como si volviera a recorrer el Json buscando la correcta. A que puede ser debido.

Código:
public class Frag_J_Actual extends Fragment {

	ArrayList<Estadisticas> estadisticasArrayList;

	Estadisticas_Adapter adapter;

    @override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
							 Bundle savedInstanceState) {
		setRetainInstance(true);

		View view = inflater.inflate(R.layout.j_actual_list, null);

		estadisticasArrayList = new ArrayList<Estadisticas>();
		new JSONAsyncTask().execute("http://cadetes.esy.es/15/jornada_actual.php");

		ListView listView = (ListView) view.findViewById(android.R.id.list);
		adapter = new Estadisticas_Adapter(getActivity(), R.layout.j_actual_row, estadisticasArrayList);

		listView.setAdapter(adapter);

		listView.setOnItemClickListener(new OnItemClickListener() {


		    @override
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
									long id) {
				
				Toast.makeText(getActivity(), estadisticasArrayList.get(position).getFecha(), Toast.LENGTH_LONG).show();
			}
		});
		return view;
	}
	class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

		ProgressDialog dialog;

	    @override
		protected void onPreExecute() {
			super.onPreExecute();
			dialog = new ProgressDialog(Frag_J_Actual.this.getActivity());
			dialog.setMessage("Cargando, por favor espere");
			dialog.setTitle("Conectando con el servidor");
			dialog.show();
			dialog.setCancelable(false);
		}

	    @override
		protected Boolean doInBackground(String... urls) {
			try {

				
				HttpGet httppost = new HttpGet(urls[0]);
				HttpClient httpclient = new DefaultHttpClient();
				HttpResponse response = httpclient.execute(httppost);

				
				int status = response.getStatusLine().getStatusCode();

				if (status == 200) {
					HttpEntity entity = response.getEntity();
					String data = EntityUtils.toString(entity);


					JSONObject jsono = new JSONObject(data);
					JSONArray jarray = jsono.getJSONArray("jornada");

					for (int i = 0; i < jarray.length(); i++) {
						JSONObject object = jarray.getJSONObject(i);

						Estadisticas J_Actual = new Estadisticas();

						J_Actual.setNombre_Local(object.getString("nomLocal"));
						J_Actual.setResult_Local(object.getString("resulLocal")+"  -  "+(object.getString("resulVisitante")));
						J_Actual.setNombre_Visi(object.getString("nomVisitante"));
						J_Actual.setFecha(object.getString("fecha"));
						J_Actual.setHora(object.getString("hora"));
						J_Actual.setEstado_Partido(object.getString("estadoPartido"));
						//J_Actual.setResult_Visitante(object.getString("resulVisitante"));

						J_Actual.setEscudo_local("http://ffcv.es/ncompeticiones/" + (object.getString("escudoLocal")));
						J_Actual.setImage2("http://ffcv.es/ncompeticiones/" + (object.getString("escudoVisitante")));

						estadisticasArrayList.add(J_Actual);
					}
					return true;
				}

				

			} catch (ParseException e1) {
				e1.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (JSONException e) {
				e.printStackTrace();
			}
			return false;
		}

		protected void onPostExecute(Boolean result) {
			dialog.cancel();
			adapter.notifyDataSetChanged();
			if(result == false)
				Toast.makeText(getActivity(), "Se ha podido obtener los datos desde el servidor", Toast.LENGTH_LONG).show();

		}
	}
}
Código:
public class J_Actual extends Fragment {

    
    ListView listView;
    ArrayAdapter adapter;

       @override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        

        return inflater.inflate(R.layout.activity_volley, container, false);


        
    }


       @override
    public boolean onOptionsItemSelected(MenuItem item) {
        
        int id = item.getItemId();

        
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
Gracias

Última edición por Merche300 Día 17/01/16 a las 11:06:24.
Responder Con Cita


  #2  
Viejo 10/01/16, 12:03:23
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
El Estadisticas_Adapter no lo pones, pero me lo puedo imaginar. Y lo que te ocurre es debido a que no usas bien el Reciclado de Vista que Android aplica a los listados. Resumiendo mucho:

Si en un listado ves 6 elementos completos en tu dispositivo, el sistema reserva espacio para 7 elementos, de tal forma que el 1 y el 8 son el mismo, el 2 y el 9 también, y así sucesivamente.

Cuando mueves el listado verás que la imagen del 1 y el 8 son la misma, y en ese momento, cuando la 8 ya es visible comienzas la descarga de su imagen y la asignas, pasando el tiempo que tarde el sistema en iniciar la descarga y asignarla.

¿Cómo se soluciona? Usando una librería de cacheo de imágenes, que entre otras cosas aplica una imagen por defecto mientras descarga la imagen correspondiente. Así mientras descarga la imagen 8 por primera vez no verás la 1, sino que verás una imagen de "Cargando" o el logo de tu aplicación, eso ya al gusto.

Librerías de cacheo de imágenes hay muchas, yo uso la propia que trae Volley, así de paso quitas el HttpClient, que lleva deprecated casi desde que salió Android.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 10/01/16, 18:50:41
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
A ver si he acertado, no creo ya que con esto tambien me lo hace:

Código:
holder.escudo_local.setImageResource(R.mipmap.ic_launcher);
		new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local());
		new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante());
Y aqui dejo el adaptador:

Código:
public class Estadisticas_Adapter extends ArrayAdapter<Estadisticas> {
	ArrayList<Estadisticas> Estadisticas_List;
	LayoutInflater vi;
	int Resource;
	ViewHolder holder;

	public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) {
		super(context, resource, objects);
		vi = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		Resource = resource;
		Estadisticas_List = objects;
	}
 
	
 @override
	public View getView(int position, View convertView, ViewGroup parent) {
		// convert view = design
		View v = convertView;
		if (v == null) {
			holder = new ViewHolder();
			v = vi.inflate(Resource, null);

			holder.escudo_local = (ImageView) v.findViewById(R.id.tv_esc_local);
			holder.escudo_visi = (ImageView) v.findViewById(R.id.tv_esc_visi);

			holder.tv_Nombre = (TextView) v.findViewById(R.id.tv_Equipo_Local);
			holder.tv_Nombre_Local = (TextView) v.findViewById(R.id.tv_Equipo_Local);
			holder.tv_Nombre_Visi = (TextView) v.findViewById(R.id.tv_Equipo_Visi);
			holder.tvNombre_Arbitro = (TextView) v.findViewById(R.id.tv_Nombre_Arbitro);
			holder.tv_Fecha = (TextView) v.findViewById(R.id.tv_Fecha);
			holder.tv_Hora = (TextView) v.findViewById(R.id.tv_Hora);
			holder.tv_Result_Local = (TextView) v.findViewById(R.id.tv_Result_Local);
			holder.tv_Result_Visitante = (TextView) v.findViewById(R.id.tv_Result_Visitante);
			holder.tv_Targeta = (TextView) v.findViewById(R.id.tv_targeta);
			holder.tv_Tar_Minuto = (TextView) v.findViewById(R.id.tv_tar_minuto);
			holder.tv_Gol_Minuto = (TextView) v.findViewById(R.id.tv_gol_minuto);
			holder.tv_Nombre_Entra = (TextView) v.findViewById(R.id.tv_nombre_entra);
			holder.tv_Dorsal_Entra = (TextView) v.findViewById(R.id.tv_dorsal_entra);
			holder.tv_Nombre_Sale = (TextView) v.findViewById(R.id.tv_nombre_sale);
			holder.tv_Dorsal_Sale = (TextView) v.findViewById(R.id.tv_dorsal_sale);
			holder.tv_Cambio_Min = (TextView) v.findViewById(R.id.tv_cambio_min);
			holder.tv_Estado_Partido = (TextView) v.findViewById(R.id.tv_Estado_Partido);
			holder.tv_Num_Goles = (TextView) v.findViewById(R.id.tv_Num_Goles);
			v.setTag(holder);
		} else {
			holder = (ViewHolder) v.getTag();
		}
		holder.escudo_local.setImageResource(R.mipmap.ic_launcher);
		new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local());
		new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante());

		//holder.tvNombre_Arbitro.setText(Estadisticas_List.get(position).getNombre_Arbitro());
		holder.tv_Nombre.setText(Estadisticas_List.get(position).getNombre());
		holder.tv_Nombre_Local.setText(Estadisticas_List.get(position).getNombre_Local());
		holder.tv_Nombre_Visi.setText(Estadisticas_List.get(position).getNombre_Visi());
		holder.tv_Fecha.setText("Fecha: "+Estadisticas_List.get(position).getFecha());
		holder.tv_Hora.setText("Hora: "+Estadisticas_List.get(position).getHora());
		holder.tv_Result_Local.setText(Estadisticas_List.get(position).getResult_Local());
		holder.tv_Result_Visitante.setText(Estadisticas_List.get(position).getResult_Visitante());
		//holder.tv_Targeta.setText("targeta: " + Estadisticas_List.get(position).getTargeta());
		//holder.tv_Tar_Minuto.setText("Targetamin: " + Estadisticas_List.get(position).getTarMinuto());
		//holder.tv_Gol_Minuto.setText("golmin: " + Estadisticas_List.get(position).getGol_Min());
		//holder.tv_Nombre_Entra.setText("Nombreentra: " + Estadisticas_List.get(position).getNombre_Entra());
		//holder.tv_Dorsal_Entra.setText("dorsalentra: " + Estadisticas_List.get(position).getDorsal_Entra());
		//holder.tv_Nombre_Sale.setText("Nombreentrasale: " + Estadisticas_List.get(position).getNombre_Sale());
		//holder.tv_Dorsal_Sale.setText("dorsalsale: " + Estadisticas_List.get(position).getDorsal_Sale());
		//holder.tv_Cambio_Min.setText("cambiomin: " + Estadisticas_List.get(position).getCambio_Min());
		holder.tv_Estado_Partido.setText(Estadisticas_List.get(position).getEstado_Partido());
		//holder.tv_Num_Goles.setText(Estadisticas_List.get(position).getNum_Goles());
		return v;

	}

	static class ViewHolder {
		public TextView tv_Nombre;
		public TextView tv_Nombre_Local;
		public TextView tv_Result_Local;
		public TextView tv_Result_Visitante;
		public TextView tvNombre_Arbitro;
		public TextView tv_Fecha;
		public TextView tv_Hora;
		public TextView tv_Nombre_Visi;
		public TextView tv_Targeta;
		public TextView tv_Tar_Minuto;
		public TextView tv_Gol_Minuto;
		public TextView tv_Nombre_Entra;
		public TextView tv_Dorsal_Entra;
		public TextView tv_Nombre_Sale;
		public TextView tv_Dorsal_Sale;
		public TextView tv_Cambio_Min;
		public TextView tv_Estado_Partido;
		public TextView tv_Num_Goles;

		public ImageView escudo_local;
		public ImageView escudo_visi;

	}

	private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
		ImageView bmImage;


		public DownloadImageTask(ImageView bmImage) {
			this.bmImage = bmImage;

		}

		protected Bitmap doInBackground(String... urls) {
			String urldisplay = urls[0];
			Bitmap mIcon11 = null;
			try {
				InputStream in = new java.net.URL(urldisplay).openStream();
				mIcon11 = BitmapFactory.decodeStream(in);
			} catch (Exception e) {
				Log.e("Error", e.getMessage());
				e.printStackTrace();
			}
			return mIcon11;
		}

		protected void onPostExecute(Bitmap result) {
			bmImage.setImageBitmap(result);

		}

	}
}
Responder Con Cita
  #4  
Viejo 10/01/16, 23:02:19
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
Si solo estas utilizando la AsyncTask para descargar las imagenes, te recomiendo muchisimo que te mires una libreria como Picasso:

http://square.github.io/picasso
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 16/01/16, 23:54:13
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Si solo estas utilizando la AsyncTask para descargar las imagenes, te recomiendo muchisimo que te mires una libreria como Picasso:

http://square.github.io/picasso
Gracias Dexafree, pero algo pasa en context.

java.lang.IllegalArgumentException: Context must not be null.

Código:
Picasso.with(context)
				.load(Estadisticas_List.get(position).getEscudo_local())
				.placeholder(R.drawable.ic_contact_icon)
				.into(holder.escudo_local);
el codigo completo:

Código:
public class Estadisticas_Adapter extends ArrayAdapter<Estadisticas> {

	Context context;

	ArrayList<Estadisticas> Estadisticas_List;
	LayoutInflater vi;
	int Resource;
	ViewHolder holder;

	public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) {
		super(context, resource, objects);
		vi = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		Resource = resource;
		Estadisticas_List = objects;
	}
 
	
 @override
	public View getView(int position, View convertView, ViewGroup parent) {
		// convert view = design
		View v = convertView;
		if (v == null) {
			holder = new ViewHolder();
			v = vi.inflate(Resource, null);

			holder.escudo_local = (ImageView) v.findViewById(R.id.tv_esc_local);
			holder.escudo_visi = (ImageView) v.findViewById(R.id.tv_esc_visi);

			holder.tv_Nombre = (TextView) v.findViewById(R.id.tv_Equipo_Local);
			holder.tv_Nombre_Local = (TextView) v.findViewById(R.id.tv_Equipo_Local);
			holder.tv_Nombre_Visi = (TextView) v.findViewById(R.id.tv_Equipo_Visi);
			//holder.tvNombre_Arbitro = (TextView) v.findViewById(R.id.tv_Nombre_Arbitro);
			holder.tv_Fecha = (TextView) v.findViewById(R.id.tv_Fecha);
			holder.tv_Hora = (TextView) v.findViewById(R.id.tv_Hora);
			holder.tv_Result_Local = (TextView) v.findViewById(R.id.tv_Result_Local);
			holder.tv_Result_Visitante = (TextView) v.findViewById(R.id.tv_Result_Visitante);
			/*holder.tv_Targeta = (TextView) v.findViewById(R.id.tv_targeta);
			holder.tv_Tar_Minuto = (TextView) v.findViewById(R.id.tv_tar_minuto);
			holder.tv_Gol_Minuto = (TextView) v.findViewById(R.id.tv_gol_minuto);
			holder.tv_Nombre_Entra = (TextView) v.findViewById(R.id.tv_nombre_entra);
			holder.tv_Dorsal_Entra = (TextView) v.findViewById(R.id.tv_dorsal_entra);
			holder.tv_Nombre_Sale = (TextView) v.findViewById(R.id.tv_nombre_sale);
			holder.tv_Dorsal_Sale = (TextView) v.findViewById(R.id.tv_dorsal_sale);
			holder.tv_Cambio_Min = (TextView) v.findViewById(R.id.tv_cambio_min);*/
			holder.tv_Estado_Partido = (TextView) v.findViewById(R.id.tv_Estado_Partido);
			//holder.tv_Num_Goles = (TextView) v.findViewById(R.id.tv_Num_Goles);
			v.setTag(holder);
		} else {
			holder = (ViewHolder) v.getTag();
		}

		Picasso.with(context)
				.load(Estadisticas_List.get(position).getEscudo_local())
				.placeholder(R.drawable.ic_contact_icon)
				.into(holder.escudo_local);

		//holder.escudo_local.setImageResource(R.mipmap.ic_launcher);
		holder.escudo_visi.setImageResource(R.mipmap.ic_launcher);

		//new DownloadImageTask(holder.escudo_local).execute(Estadisticas_List.get(position).getEscudo_local());
		new DownloadImageTask(holder.escudo_visi).execute(Estadisticas_List.get(position).getEscudo_visitante());

		//holder.tvNombre_Arbitro.setText(Estadisticas_List.get(position).getNombre_Arbitro());
		holder.tv_Nombre.setText(Estadisticas_List.get(position).getNombre());
		holder.tv_Nombre_Local.setText(Estadisticas_List.get(position).getNombre_Local());
		holder.tv_Nombre_Visi.setText(Estadisticas_List.get(position).getNombre_Visi());
		holder.tv_Fecha.setText("Fecha: "+Estadisticas_List.get(position).getFecha());
		holder.tv_Hora.setText("Hora: "+Estadisticas_List.get(position).getHora());
		holder.tv_Result_Local.setText(Estadisticas_List.get(position).getResult_Local());
		holder.tv_Result_Visitante.setText(Estadisticas_List.get(position).getResult_Visitante());
		//holder.tv_Targeta.setText("targeta: " + Estadisticas_List.get(position).getTargeta());
		//holder.tv_Tar_Minuto.setText("Targetamin: " + Estadisticas_List.get(position).getTarMinuto());
		//holder.tv_Gol_Minuto.setText("golmin: " + Estadisticas_List.get(position).getGol_Min());
		//holder.tv_Nombre_Entra.setText("Nombreentra: " + Estadisticas_List.get(position).getNombre_Entra());
		//holder.tv_Dorsal_Entra.setText("dorsalentra: " + Estadisticas_List.get(position).getDorsal_Entra());
		//holder.tv_Nombre_Sale.setText("Nombreentrasale: " + Estadisticas_List.get(position).getNombre_Sale());
		//holder.tv_Dorsal_Sale.setText("dorsalsale: " + Estadisticas_List.get(position).getDorsal_Sale());
		//holder.tv_Cambio_Min.setText("cambiomin: " + Estadisticas_List.get(position).getCambio_Min());
		holder.tv_Estado_Partido.setText(Estadisticas_List.get(position).getEstado_Partido());
		//holder.tv_Num_Goles.setText(Estadisticas_List.get(position).getNum_Goles());
		return v;

	}

	static class ViewHolder {
		public TextView tv_Nombre;
		public TextView tv_Nombre_Local;
		public TextView tv_Result_Local;
		public TextView tv_Result_Visitante;
		public TextView tvNombre_Arbitro;
		public TextView tv_Fecha;
		public TextView tv_Hora;
		public TextView tv_Nombre_Visi;
		public TextView tv_Targeta;
		public TextView tv_Tar_Minuto;
		public TextView tv_Gol_Minuto;
		public TextView tv_Nombre_Entra;
		public TextView tv_Dorsal_Entra;
		public TextView tv_Nombre_Sale;
		public TextView tv_Dorsal_Sale;
		public TextView tv_Cambio_Min;
		public TextView tv_Estado_Partido;
		public TextView tv_Num_Goles;

		public ImageView escudo_local;
		public ImageView escudo_visi;

	}

	private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
		ImageView bmImage;


		public DownloadImageTask(ImageView bmImage) {
			this.bmImage = bmImage;

		}

		protected Bitmap doInBackground(String... urls) {
			String urldisplay = urls[0];
			Bitmap mIcon11 = null;
			try {
				InputStream in = new java.net.URL(urldisplay).openStream();
				mIcon11 = BitmapFactory.decodeStream(in);
			} catch (Exception e) {
				Log.e("Error", e.getMessage());
				e.printStackTrace();
			}
			return mIcon11;
		}

		protected void onPostExecute(Bitmap result) {
			bmImage.setImageBitmap(result);

		}

	}
}

Última edición por Merche300 Día 17/01/16 a las 01:05:09.
Responder Con Cita
  #6  
Viejo 17/01/16, 10:43:40
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
La propia excepción te está diciendo que el Context con el que estás intentando utilizar Picasso es null.

Fíjate que en el constructor de tu adapter no te estás guardando la referencia al Context, por tanto cuando le pasas context, este es null.
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 17/01/16, 10:57:27
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
Supongo que te refieres a esto, va perfecto.

Código:
public Estadisticas_Adapter(Context context, int resource, ArrayList<Estadisticas> objects) {
		super(context, resource, objects);
		vi = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		Resource = resource;
		Estadisticas_List = objects;
		this.context = context;
	}
PD: no me acorde del ese botón, hace mucho que estoy apartado de el mundo del móvil, aunque lo mio han sido roms y temas, perdón.
Responder Con Cita
  #8  
Viejo 17/01/16, 10:59:21
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
Entonces ya funciona todo correcto?
Si es así, marcamos como solucionado
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 17/01/16, 11:03:43
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
Por supuesto, ahora voy a hacerla toda con Volley + Picasso, ya tengo un par de fines de semana ocupado.
Responder Con Cita
Gracias de parte de:
Respuesta

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



Hora actual: 09:12:19 (GMT +2)



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

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