0

我有一些麻煩讓這個工作正常。我有一個ViewPager與3 webview的,目前我的經驗問題是,只有情況0(我的第一個webview)實際上是正確使用進度條,(停止時,進展是100等)。我的其他2個網頁瀏覽進度條(案例1和2)卻沒有做任何事情。任何建議?ViewPager中的ProgressBar與Webview的

public class AwesomePagerActivity extends Activity { 

private ViewPager awesomePager; 
private static int NUM_AWESOME_VIEWS = 3; 
private Context context; 
private AwesomePagerAdapter awesomeAdapter; 
LayoutInflater inflater; 
ProgressBar progressBar; 

/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    context = this; 
    inflater = (LayoutInflater) 
    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    awesomeAdapter = new AwesomePagerAdapter(); 
    awesomePager = (ViewPager) findViewById(R.id.pager); 
    awesomePager.setOffscreenPageLimit(3); 
    awesomePager.setAdapter(awesomeAdapter); 
} 
private class AwesomePagerAdapter extends PagerAdapter { 

    public int getCount() { 
    return NUM_AWESOME_VIEWS; 
    } 

public Object instantiateItem(View collection, int position) { 
    View layout = null; 
    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    WebView web = null; 
    progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
    switch (position) { 
    case 0: 
     layout = mInflater.inflate(R.layout.activity_main, null); 
     web = (WebView) layout.findViewById(R.id.webView1); 
     web.loadUrl("http://developer.android.com"); 
     break; 
    case 1: 
     layout = mInflater.inflate(R.layout.activity_community, null); 
     web = (WebView) layout.findViewById(R.id.webView2); 
     web.loadUrl("http://www.xda-developers.com"); 
     break; 
    case 2: 
     layout = mInflater.inflate(R.layout.activity_support, null); 
     web = (WebView) layout.findViewById(R.id.webView3); 
     web.loadUrl("http://www.samsung.com"); 
     break; 
    } 
    WebSettings websettings = web.getSettings(); 
    websettings.setBuiltInZoomControls(position == 0 ? false : true); 
    websettings.setUseWideViewPort(position == 0 ? true : false); 
    websettings.setJavaScriptEnabled(true); 
    websettings.setAllowFileAccess(true); 
    websettings.setDomStorageEnabled(true); 
    websettings.setLoadWithOverviewMode(true); 
    web.requestFocusFromTouch(); 
    websettings.setSavePassword(true); 
    web.setWebViewClient(new WebViewClient(){ 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 

       super.onPageStarted(view, url, favicon); 
       progressBar.setVisibility(View.VISIBLE); 
      } 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       progressBar.setVisibility(View.VISIBLE); 
       return true; 
      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       super.onPageFinished(view, url); 

       progressBar.setVisibility(View.GONE); 
      } 
     }); 
     web.setWebChromeClient(new WebChromeClient(){ 
      public void onProgressChanged(WebView view, int progress) { 
       //MainActivityViewPager.this.setProgress(progress * 100); 
       progressBar.setProgress(progress * 100); 

      } 
      }); 
    ((ViewPager) collection).addView((View) layout); 
    return layout; 
} 

public void destroyItem(View collection, int position, Object view) { 
    ((ViewPager) collection).removeView((View) view); 
} 

public boolean isViewFromObject(View view, Object object) { 
    return view == ((View) object); 
} 
} 
} 
+0

嘗試。 progressBar1);'內部switch-cases – 2013-03-18 23:49:17

+0

@ρяσѕρєяK感謝評論,不幸的是,這並沒有工作,仍然只爲第一個進度條工作。 – 2013-03-19 15:35:16

回答

1

什麼建議?

我猜你在每個您在ViewPager使用三種佈局的ProgressBar(具有不同ID的?)。問題是,progressBar變量將始終指向第一個佈局中的ProgressBar,因爲findViewById返回具有該id的第一個widget(它將來自始終可用的第一個佈局)。解決的辦法是根據當前WebView以分離那些ProgressBars的行爲:

//... 
switch (position) { 
case 0: 
    layout = mInflater.inflate(R.layout.activity_main, null); 
    web = (WebView) layout.findViewById(R.id.webView1); 
    web.loadUrl("http://developer.android.com"); 
     progressBar = (ProgressBar) layout.findViewById(R.id.progressBar1); 
break; 
case 1: 
     layout = mInflater.inflate(R.layout.activity_community, null); 
    web = (WebView) layout.findViewById(R.id.webView2); 
    web.loadUrl("http://www.xda-developers.com"); 
      progressBar = (ProgressBar) layout.findViewById(R.id.progressBar2); 
break; 
case 2: 
     layout = mInflater.inflate(R.layout.activity_support, null); 
      web = (WebView) layout.findViewById(R.id.webView3); 
      web.loadUrl("http://www.samsung.com"); 
      progressBar = (ProgressBar) layout.findViewById(R.id.progressBar3); 
break; 
} 
// .... 
web.setWebViewClient(new SpecialWebView(progressBar)); 
web.setWebChromeClient(new SpecialWebChromeClient(progressBar)); 
((ViewPager) collection).addView((View) layout); 

其中SpecialWebViewSpecialWebChromeClient和是:將`進度=(進度條)findViewById(R.id後

public static class SpecialWebView extends WebViewClient { 

    private ProgressBar progressBar; 

    public SpecialWebView(ProgressBar progressBar) { 
     this.progressBar = progressBar; 
    } 

    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {   
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setProgress(0); 
     return super.shouldOverrideUrlLoading(view, url); 
    } 

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


public static class SpecialWebChromeClient extends WebChromeClient { 

    ProgressBar progressBar; 

    public SpecialWebChromeClient(ProgressBar progressBar) { 
     this.progressBar = progressBar; 
    } 

    public void onProgressChanged(WebView view, int progress) { 
     // MainActivityViewPager.this.setProgress(progress * 100); 
     progressBar.setProgress(progress); 
    } 
} 
+0

謝謝你幫我解決這個問題。欣賞它,代碼完美地工作。 – 2013-03-25 20:19:30