我的ProgressBar在加载我的WebView时不会显示,为什么?

时间:2013-03-06 20:36:45

标签: android asynchronous android-asynctask android-webview android-progressbar

我创建了一个WebViewActivity扩展Activity并在我的应用内显示WebView,而不是重定向到浏览器。

因此,当视图加载时,我尝试使用AsyncTask来显示我的ProgressBar。但进度条根本不显示。这是我正在使用的代码:

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.app.Activity;

public class WebViewActivity extends Activity {

    WebView webView;
    TextView textView;
    ProgressBar bar;

    private class Async extends AsyncTask<Void, Void, Void> {

        protected Void doInBackground(Void... arg0) {
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            String url = new String(getIntent().getStringExtra("url"));
            webView.getSettings().setLoadWithOverviewMode(true);
            webView.getSettings().setUseWideViewPort(true);
            webView.loadUrl(url);
            textView.setText(getIntent().getStringExtra("title"));
            bar.setVisibility(ProgressBar.INVISIBLE);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_web_view);

        vueText = (TextView) findViewById(R.id.barTitle);
        vueWeb = (WebView) findViewById(R.id.WebView);
        bar = (ProgressBar) findViewById(R.id.progressBar);
        bar.setVisibility(ProgressBar.VISIBLE);
        new Async().execute();
    }
}

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/grayBackground"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/barTitle" />

    <ScrollView
        android:id="@+id/sc1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/barTitle"
        android:fillViewport="true" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <WebView
                android:id="@+id/WebView"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:visibility="visible" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

您应该在AsyncTask方法中执行doInBackground()的后台操作(加载网址)。

在UI线程上调用onPostExecute(),以便在运行时冻结UI。

有关详细信息,请参阅AsyncTask的文档。

答案 1 :(得分:1)

您必须在pubishProgress()内使用doInBackground

然后覆盖onProgressUpdate