2015-12-04 3 views
0

Я пытаюсь добавить индикатор выполнения в приложении на основе Android. Я добавил следующий код, но не работал, когда тестировался. Примечание: index.html имеет тег перенаправления, который загружает случайный URL. Все работает нормально, кроме панели прогресса.Как добавить индикатор прогресса в андроид webview

MainActivity.java

public class MainActivity extends ActionBarActivity { 
    private WebView mWebView; 
    ProgressBar Pbar; 
    private final int ID_MENU_EXIT = 1; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mWebView = (WebView) findViewById(R.id.activity_main_webview); 
     Pbar = (ProgressBar) findViewById(R.id.pB1); 
       // Enable Javascript 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     mWebView.setWebViewClient(new WebViewClient()); 
     mWebView.setWebViewClient(new MyAppWebViewClient()); 
     if (isNetworkAvailable()) 
      mWebView.loadUrl("file:///android_asset/www/index.html"); 
     else 
      mWebView.loadUrl("file:///android_asset/www/404.html"); 

    } 

    public class myWebClient extends WebViewClient{ 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      Pbar.setVisibility(View.GONE); 
     } 

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


    private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 


    @Override 
    public void onBackPressed() { 
     if(mWebView.canGoBack()) { 
      mWebView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
       //get the MenuItem reference 
     MenuItem item = 
       menu.add(Menu.NONE,ID_MENU_EXIT,Menu.NONE,R.string.exitOption); 
     //set the shortcut 
     item.setShortcut('5', 'x'); 


     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     //check selected menu item 
     if(item.getItemId() == ID_MENU_EXIT) 
     { 
      //close the Activity 
      this.finish(); 
      return true; 
     } 
     return false; 
    } 


} 

Activity_main.xml

<ProgressBar android:id="@+id/pB1" 
     style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:layout_centerVertical="true" 
     android:padding="2dip"> 
    </ProgressBar> 

     <WebView 
     android:id="@+id/activity_main_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

ответ

0

Ну

Используйте этот код для индикатора выполнения, если ваш WebView ждет е или загрузку WebView. :

Планировка:

<?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"> 

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</RelativeLayout> 

активность:

public class MapActivity extends MenuActivity { 

private final static String TAG = "HearingTest"; 
private WebView webView; 
private String urlString; 
private ProgressDialog progressDialog; 
private Context context; 

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

    context = MapActivity.this; 

    urlString = getString(R.string.location_url); 

    WebViewSettings(); 

    LoadWebPage(urlString); 

    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 

     @Override 
     protected void onPreExecute() { 
      progressDialog = new ProgressDialog(context); 
      progressDialog.setTitle("Loading..."); 
      progressDialog.setMessage("Please wait."); 
      //progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 
      progressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       //Do something... 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if (progressDialog!=null) { 
       progressDialog.dismiss(); 
      } 
     } 
    }; 

    task.execute((Void[])null); 
} 

public void LoadWebPage(String url){ 

    try { 
     webView.loadUrl(url); 
     Log.d(TAG, "URL" + url + "connected"); 
    } 
    catch (Exception e) { 
      Log.d(TAG, "URL: " + url + " couldn't connect."); 
    } 
} 

public void WebViewSettings(){ 

    webView = (WebView) findViewById(R.id.webview); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setSupportZoom(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 

    webView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (Uri.parse(url).getHost().equals(urlString)) { 
       // This is my web site, so do not override; let my WebView load the page 
       return false; 
      } 
      // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

     @Override 
     public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { 
      handler.proceed(); 
     } 
    }); 
} 

    protected void DisplayProgressBar(){ 

    } 
} 
+0

выше код, который я при условии хорошо. Я только делаю ошибку с индикатором progressbar. Пожалуйста, помогите мне только с этим. –

Смежные вопросы