2011-12-21 1351 views
5

¡Gracias por intentar resolver mi problema!Pantalla de bienvenida XML -> Mostrar vista web

Actualmente, mi aplicación básicamente carga una página web usando la vista web de Android. El inconveniente es que a veces (con una mala conexión) la página web tarda más de 10 segundos en cargarse. ¿Hay alguna manera de que pueda crear una especie de pantalla "cargando" XML mientras se carga la página web?

Tome un vistazo a mi código ...

package com.ect; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Window; 
import android.webkit.CookieSyncManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class SomeActivity extends Activity { 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //THIS IS WHAT I WANT: setContentView(R.layout.main); 

     CookieSyncManager.createInstance(getBaseContext()); 

     // Let's display the progress in the activity title bar, like the 
     // browser app does. 


     getWindow().requestFeature(Window.FEATURE_PROGRESS); 

     WebView webview = new WebView(this); 
     setContentView(webview); 


     webview.getSettings().setJavaScriptEnabled(true); 

     final Activity activity = this; 
     webview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      // Activities and WebViews measure progress with different scales. 
      // The progress meter will automatically disappear when we reach 100% 
      activity.setProgress(progress * 1000); 
     } 
     }); 

webview.setWebViewClient(new WebViewClient() { 

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     //Users will be notified in case there's an error (i.e. no internet connection) 
     Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
} 

public void onPageFinished(WebView view, String url) { 
    CookieSyncManager.getInstance().sync(); 
} 
}); 

CookieSyncManager.getInstance().startSync(); 
CookieSyncManager.getInstance().sync(); 

    //This will load the webpage that we want to see 
     webview.loadUrl("http://www.web.com/"); 

    } 
} 

Esa es mi código. Si miras de cerca, hice un comentario que dice: "ESTO ES LO QUE QUIERO: ..."

Ese comentario llamaría al archivo main.xml que se mostrará, pero si uso ese comentario, el archivo main.xml se mostrará, pero la vista web nunca aparece ...

¿Cómo puedo visualizar el archivo main.xml y luego (una vez cargada la vista web) mostrar la página web?

Respuesta

3

Necesita crear un objeto WebViewClient y anular el método onPageFinished(). Luego use webView.setWebViewClient() para configurar el objeto WebViewClient que creó anteriormente en WebView. Ahora puede ejecutar código en onPageFinished(), como setContentView(), para cambiar la vista de contenido de la pantalla de carga a la vista web cuando termina de cargarse.

Este tutorial puede ayudarlo un poco, aunque no es exactamente lo que necesita. http://www.giantflyingsaucer.com/blog/?p=1331

4

Tome un look here, creo que esto ya ha sido respondido. Básicamente, anula algunos métodos de la clase WebViewClient.

3

Debe usar el evento en PageFinished().

Aquí es la referencia oficial Clickme

Su actividad principal debe setContentView (R.layout.main); y la función en PageFinished() debe establecerContentView (webview);

+0

Gracias Piperoman! Soy completamente nuevo en el desarrollo con Android ... ¿Hay alguna forma de que pueda darme algún código? – Joe

3

Puede hacer algo como esto, en su diseño raíz El diseño del marco (o diseño relativo) hace algo como esto.

<Framelayout android:layout_height="fill_parent" android:layout_width="fill_parent" 
....> 

    <Webview android:layout_height="fill_parent" android:layout_width="fill_parent"/> 

    <include android:layout_height="fill_parent" android:layout_width="fill_parent" 
    layout="@loadingLayout"/> 

</Framelayout> 

Cuando la vista web termine de cargarse, simplemente cambie la visibilidad de los componentes incluidos a Gone.

Espero que ayude ..

+0

¿Puede darme todo el código, por favor? – Joe

+0

Lo siento pero no tengo todo el código, pero intentaré publicar un ejemplo más completo cuando pueda. –

Cuestiones relacionadas