Как показать ProgressBar во время ожидания HttpRespons? - PullRequest
1 голос
/ 28 марта 2012

Я новичок в разработке для Android.

Я разработал веб-приложение для Android. Когда я нажимаю подменю или ссылки с этой веб-страницы, соответствующие статьи выбираются с веб-сайта с использованием RSS-каналов в формате XML.

Этот процесс занимает некоторое время для загрузки страницы. Я хочу показать индикатор выполнения во время загрузки контента.

Я пробовал следующий код:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
   dialog = ProgressDialog.show(this,"","Loading...");
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);//to remove title bar
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove notification bar
    setContentView(R.layout.main);
    wv = (WebView)findViewById(R.id.webview);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setBackgroundColor(0);
    wv.setWebViewClient(new WebViewClient() {});
    wv.loadUrl("file:///android_asset/HomePage.html");

}
@Override
protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    // Save the state of the WebView
    wv.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
    super.onRestoreInstanceState(savedInstanceState);
    // Restore the state of the WebView
     wv.restoreState(savedInstanceState);
}


public class mywebclient extends WebViewClient{

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
        dialog.show();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        view.loadUrl("file:///android_asset/HomePage.html");
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
        dialog.dismiss();

    }

}

}

Показывает индикатор выполнения только на домашней странице и не исчезает после полной загрузки страницы.

Что я должен сделать для отображения индикатора выполнения при переходе по подменю или ссылкам с этой веб-страницы.? Заранее спасибо.

1 Ответ

3 голосов
/ 29 марта 2012

Попробуйте этот код

package your.app;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Main extends Activity {

WebView webview;

final Activity activity = this;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);

    setContentView(R.layout.main);

    getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
            Window.PROGRESS_VISIBILITY_ON);

    webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setJavaScriptEnabled(true);

    final ProgressDialog progressDialog = new ProgressDialog(activity);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setMessage("Loading...please wait");
    progressDialog.setCancelable(true);

    webview.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

    });

    webview.loadUrl("http://www.mysite.com/mobile/");

    // WebChromeClient give progress etc info
    webview.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView view, int progress) {

            progressDialog.show();
            progressDialog.setProgress(0);
            activity.setProgress(progress * 1000);

            progressDialog.incrementProgressBy(progress);

            if (progress == 100 && progressDialog.isShowing())
                progressDialog.dismiss();
        }
    });

}

}

Примечание: не забудьте изменить файл манифеста для доступа в Интернет

Далее вы можете добавить функциональность для кнопки "Назад" Проверка интернетаСоединение Скрыть заголовок Строка Показать во весь экран

...