3

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);
              }
        });
    }   
}
4

2 に答える 2

2

問題はおそらく次の行です:

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

ここでは、Activity(!)にidの最初のビューを見つけるように求めていますR.id.webviewBrowserここで、同じフラグメントの複数のインスタンスがアタッチされている場合に何が起こるかを考えてくださいActivity...正確には、常にそのIDを持つ最初のオカレンスが返されます。言い換えると、URLは常にWebView最初にアタッチされたBrowserフラグメントのにロードされます。

WebViewからを膨らませるのではなく、フラグメントのルートビューでビューを見つけることにより、各フラグメントに関連するものActivityを膨らませることができます。WebViewBrowser

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

基本的に、ビュールックアップには正しいスコープを使用する必要があります。

于 2013-03-25T23:46:20.847 に答える
0

これは、アダプターを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;
    }
于 2015-09-11T21:36:21.667 に答える