Foros del Web » Programando para Internet » Android »

Problemas al cambiar entre actividades

Estas en el tema de Problemas al cambiar entre actividades en el foro de Android en Foros del Web. Buenas noches, Estoy desarrollando una aplicación en Android que tira de una api y por ahora va todo bien. El problema que tengo es que ...
  #1 (permalink)  
Antiguo 07/11/2011, 14:24
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Problemas al cambiar entre actividades

Buenas noches,

Estoy desarrollando una aplicación en Android que tira de una api y por ahora va todo bien.
El problema que tengo es que al cambiar entre actividades, al cargar la actividad que voy a mostrar, me sigue mostrando en pantalla la actividad actual, y a mi me gustaria que salga con otro efecto, que la actividad actual se cierre ... que se abra la nueva actividad y se cargue el contenido.

Como ejemplo explicativo, yo tengo el listado de noticias, y al pulsar sobre una de ellas, la pantalla se queda "cargando", y cuando las llamadas a la api se terminan de hacer, entonces ahi recien me cambia de pantalla, y yo quisiera que primero cambie de pantalla, y luego se cargue todo (aunque se vea en negro, yo me lo curraria para poner algun efecto, cosa que aun no he visto).

Alguien se topo con lo mismo? La verdad todos los ejemplos de intents y startactivity que vi son iguales, y tengo ese problema que quisiera solucionar.

Gracias por todo!

Saludos.
  #2 (permalink)  
Antiguo 08/11/2011, 16:11
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problemas al cambiar entre actividades

De casualidad estas corriendo todo el codigo que carga la noticia en el thread del UI? Seria mas facil ayudarte si podemos ver tu codigo.
  #3 (permalink)  
Antiguo 08/11/2011, 16:53
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problemas al cambiar entre actividades

Este es el codigo:


Código PHP:
package com.rosal.pdb;

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class 
Pdb extends Activity {


    @
Override
    
public void onCreate(Bundle savedInstanceState) {
        try {
            
super.onCreate(savedInstanceState);
            
setContentView(R.layout.main);


            
// ATP
            
item = (ImageButtonfindViewById(R.id.atp);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2154");
                    
startActivity(i);
                }
            });

            
// WTA
            
item = (ImageButtonfindViewById(R.id.wta);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2155");
                    
startActivity(i);
                }
            });

            
// Copa davis
            
item = (ImageButtonfindViewById(R.id.copaDavis);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2156");
                    
startActivity(i);
                }
            });

            
// ATP
            
item = (ImageButtonfindViewById(R.id.copaFed);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2157");
                    
startActivity(i);
                }
            });

            
// ATP
            
item = (ImageButtonfindViewById(R.id.historia);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2159");
                    
startActivity(i);
                }
            });

            
// ATP
            
item = (ImageButtonfindViewById(R.id.jovenesPromesas);
            
item.setOnClickListener(new OnClickListener() {

                @
Override
                
public void onClick(View v) {
                    
Intent i = new Intent(getApplicationContext(), Pdb.class);
                    
i.putExtra("tid""2158");
                    
startActivity(i);
                }
            });

            
Bundle extras getIntent().getExtras();
            if (
extras == null) {
                
url = new XmlParser("http://www.puntodebreak.com/api/get.xml");
            } else {
                
tid extras.getString("tid");
                
url = new XmlParser(
                        
"http://www.puntodebreak.com/api/term/retrieve.xml?tid="
                                
tid);
            }

            
noticias url.parse();
            
content = (TableLayoutfindViewById(R.id.contenido);

            for (
int i 0noticias.size(); i++) {
                
// Declaro las nuevas filas

                
LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(
                        
LinearLayout.LayoutParams.FILL_PARENT,
                        
LinearLayout.LayoutParams.WRAP_CONTENT);
                
layoutParam.setMargins(5050);

                
fila = new TableRow(this);
                
columnaImagen = new LinearLayout(this);
                
columnaTexto = new LinearLayout(this);

                
// Declaro el contenido
                
titulo = new TextView(this);
                
imagen = new ImageView(this);
                
fecha = new TextView(this);

                
// Configuro las columnas
                
fila.setPadding(510510);
                
fila.setOrientation(TableLayout.HORIZONTAL);
                
columnaImagen.setOrientation(LinearLayout.HORIZONTAL);
                
columnaImagen.setMinimumWidth(65);
                
columnaTexto.setOrientation(LinearLayout.VERTICAL);

                
titulo.setText(noticias.get(i).getTitulo());
                
bitmap BitmapFactory.decodeStream((InputStream) new URL(
                        
noticias.get(i).getImagen()).getContent());
                
imagen.setImageBitmap(bitmap);
                
fecha.setText(noticias.get(i).getFecha());

                
columnaImagen.addView(imagen);
                
columnaTexto.addView(titulo);
                
columnaTexto.addView(fecha);

                
fila.addView(columnaImagen);
                
fila.addView(columnaTexto);
                
fila.setTag(noticias.get(i).getNid());

                
fila.setOnClickListener(new OnClickListener() {

                    @
Override
                    
public void onClick(View v) {
                        
Intent i = new Intent(getApplicationContext(), Interiores.class);
                        
i.putExtra("nid"String.valueOf(v.getTag()));
                        
startActivity(i);
                    }
                });

                
content.addView(filalayoutParam);
            }

        } catch (
Exception e) {
            
Log.d("Error"e.toString());
        }
    }

Todo funciona bien, el problema es que cuando yo pincho en cada noticia (que ejecuta el onclick de la variable fila), yo quisiera que se cambie de pantalla automaticamente, y la nueva actividad que ejecute se cargue con la nueva pantalla. Ahora mismo yo presiono un item de menu (por decir un ejemplo), y la aplicacion se queda estatica, sin animacion .... y luego de un rato se carga todo nuevamente y se muestra el contenido.
Mi intencion es que se cambie de pantalla, salga un cuadro de dialogo diciendo "cargando" (eso es otra cosa) ... y luego se cargue la pantalla.

Estuve viendo cosas de animaciones, addflags, pero no logre nada interesante.

Si necesitas algo mas decime, pero....no es la gran cosa lo que he realizado.

Saludos.
  #4 (permalink)  
Antiguo 09/11/2011, 11:59
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problemas al cambiar entre actividades

Para lo que quieres hacer debes manejar hilos.

Ahora mismo tu aplicación ejecuta todo en el Thread de la interface gráfica, lo cual hace que mientras estés realizando alguna llamada a un servicio que tome una cantidad considerable de tiempo (en este caso la llamada al WebService), la interface se congele hasta que termine de ejecutarse y recibas una respuesta.

Crea un Thread para que se ejecute la parte del código que llama a la pagina en el fondo.
  #5 (permalink)  
Antiguo 09/11/2011, 14:04
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problemas al cambiar entre actividades

Buenisimo mirare eso de los threads! al menos ya tengo algo con que empezar!

Saludos.

Etiquetas: pantalla, todo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:33.