2013-10-09 3 views
0

Мое приложение начинается с загрузки веб-страницы в виде WebView на onCreate. Должен ли я распространять это на новый поток, так как он может немного зависать? Или, по крайней мере, способ показать, что страница по-прежнему загружается. Он будет отображаться как белый в течение нескольких секунд.WebView loading page Android

Кроме того, существует ли способ предотвратить перегрузку страницы при изменении ориентации?

ответ

1

webview обрабатывает резьбу, поэтому вам не нужно об этом беспокоиться.

вы можете зарегистрировать обратные вызовы, когда начинается и заканчивается загрузка страницы. вам решать поставить индикатор прогресса или что угодно. см. WebChromeClient.onProgressChanged() для деталей. вот good post, который дает некоторые подробности.

Вы можете добавить что-то в свой манифест, чтобы сообщить системе, что вам не нужны изменения ориентации. добавить следующее к вашему определению активности,

android:configChanges="orientation" 

другой вариант, чтобы заблокировать приложение в одной ориентации или другой,

android:screenOrientation="portait" 
0

Вы должны использовать диалог прогресса. Показать диалог, чтобы загрузить веб-страницу в WebView.

public final class MyWebview extends Activity { 

private static final int DIALOG2_KEY = 1; 
private ProgressDialog pd = null; 
private static final String AmitBlog="YOUR URL"; 
private WebView webView; 
@Override 
protected void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    pd = new ProgressDialog(this); 
    webView = (WebView) findViewById(R.id.webview); 
    webView.setWebViewClient(new HelpClient()); 
    webView.getSettings().setBuiltInZoomControls(true); 

    /** Showing Dialog Here */ 
    showDialog(DIALOG2_KEY); 
} 

@Override 
protected void onResume() { 
       super.onResume(); 
    LoadView(); 
} 

private void LoadView() 
{ 
    webView.loadUrl(AmitBlog); 
} 

/** Its very important while navigation hardware back button if we navigate to another link .Its like a Stack pop of all the pages you visited in WebView */ 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    if (webView.canGoBack()) { 
    webView.goBack(); 
    return true; 
    } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

/** WebViewClient is used to open other web link to the same Activity. */ 

    private final class HelpClient extends WebViewClient { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
    setTitle(view.getTitle()); 

    /** Dismissing Dialog Here after page load*/ 
    dismissDialog(DIALOG2_KEY); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.startsWith("file")) { 
    return false; 
    } else{ 
    view.loadUrl(url); 
    return true; 
    } 
    } 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) 
    { 
    case DIALOG2_KEY: 
    { 
    pd.setMessage(getResources().getString(R.string.Loading)); 
    pd.setIndeterminate(true); 
    pd.setCancelable(false); 
    return pd; 
    } 
    } 
    return null; 
} 
}