【问题标题】:WebView not loading with ViewPagerWebView 未使用 ViewPager 加载
【发布时间】:2013-03-25 23:29:01
【问题描述】:

我正在尝试构建一个ViewPager,其中包含一堆WebViews。我能够让ViewPager 工作,但是,只有最初的WebView 正在加载它的内容。当我滑动到其他视图时,它们是空白的。没有错误信息或任何东西。当我断点代码时,loadUrl 被正确的 Url 命中,所以不确定发生了什么:

活动

public class BrowserPager extends SherlockFragmentActivity {
    private  List <String> urls;
    private static int NUMBER_OF_PAGES;

    @Override
    public void onCreate(final Bundle icicle)
    {    
        setContentView(R.layout.browser_pager);

        urls = GetUrls();
        NUMBER_OF_PAGES = urls.getCount();

        mViewPager = (ViewPager)findViewById(R.id.pager);
        mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mMyFragmentPagerAdapter);
    }

    private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter  {  

        public MyFragmentPagerAdapter(FragmentManager fm) {  
             super(fm);  
        }  

        @Override
        public Fragment getItem(int index) {            
            return Browser.newInstance(urls.get(index));
        }

        @Override
        public int getCount() {  
             return NUMBER_OF_PAGES;  
        }
   }
}

片段

public class Browser extends SherlockFragment {

    private String mUrl;
    private WebView mWebView;

    public static Browser newInstance(String url) {

        Browser b = new Browser();
        Bundle bundle = new Bundle();
        bundle.putString("url", url);
        b.setArguments(bundle);

        return b;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (getArguments() != null)
            mUrl = getArguments().getString("url");     

        return inflater.inflate(R.layout.browser, container, false);
    }

    @Override
    public void onResume()
    { 
        super.onResume();

        DisplaySite();
    }   

    private void DisplaySite() {

        mWebView = (WebView)getActivity().findViewById(R.id.webview);

        mWebView.getSettings().setSupportZoom(true);  
        mWebView.getSettings().setBuiltInZoomControls(true);
        mWebView.loadUrl(mUrl);

        final ProgressBar progess = (ProgressBar)getActivity().findViewById(R.id.ProgressBar);

        mWebView.setWebViewClient(new WebViewClient() {
              public void onPageStarted(WebView view, String url, Bitmap favicon) {
                progess.setVisibility(View.VISIBLE);
                progess.setProgress(0);
              }

              public void onPageFinished(WebView view, String url) {
                progess.setVisibility(View.GONE);
              }

        });

        mWebView.setWebChromeClient(new WebChromeClient() {

              public void onProgressChanged(WebView view, int progress) {
                  progess.setProgress(progress);
              }
        });
    }   
}

【问题讨论】:

    标签: android android-webview android-viewpager


    【解决方案1】:

    问题大概是下面这行:

    mWebView = (WebView)getActivity().findViewById(R.id.webview);
    

    在这里,您要求 Activity (!) 查找 ID 为 R.id.webview 的第一个视图。现在想想当有多个相同Browser片段的实例附加到Activity时会发生什么...确切地说,总是返回具有该ID的第一个匹配项。换句话说:url 将始终加载到第一个附加的Browser 片段的WebView 中。

    您不想从Activity 扩充WebView,而是通过在片段的根视图中查找视图来扩充与每个Browser 片段相关的WebView

    mWebView = (WebView) getView().findViewById(R.id.webview);
    

    基本上您需要使用正确的范围进行视图查找。

    【讨论】:

      【解决方案2】:

      如果您将适配器设置为从 PagerAdapter 继承,则可以完成此操作。 https://goo.gl/0J1aCh

       @Override
          public Object instantiateItem(ViewGroup container, int position) {
      
              Page page = pages.get(position);
              Magazine magazine = dispatcher.getMagazine();
      
              WebView webView = new WebView( activity );
              ActionBar.LayoutParams params =
                      new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT );
      
              webView.setLayoutParams(params);
      
              webView.getSettings().setJavaScriptEnabled(true);
              webView.loadUrl( magazine.getFileLocation() + "/" + page.getName());
      
              container.addView( webView );
      
              return webView;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多