android webview不加载片段

Posted

技术标签:

【中文标题】android webview不加载片段【英文标题】:android webview do not load in fragment 【发布时间】:2015-06-16 03:13:21 【问题描述】:

我遇到了一个非常奇怪的问题:我正在尝试在片段中加载 web 视图,但我发誓我找不到让它工作的方法,而且我完全不知道原因。奇怪的是,如果在 Activity 中运行相同的代码也可以工作

这是我非常基本的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <WebView
        android:id="@+id/webview"
        android:background="@color/black"
        android:layout_
        android:layout_ />
</RelativeLayout>

这是代码工作的活动

public class ProvaWebview extends Activity 
    WebView wv;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prova_webview);

         wv=(WebView)findViewById(R.id.webview);
        WebSettings settings=wv.getSettings();
        wv.setWebChromeClient(new WebChromeClient() 
        );
        final String mimeType = "text/html";
        final String encoding = "UTF-8";
        String html = getHTML();
        settings.setjavascriptEnabled(true);
        wv.loadDataWithBaseURL("", html, mimeType, encoding, "");
    

    @Override
    public void onBackPressed() 
        super.onBackPressed();
       wv.clearHistory();
       wv.clearCache(true);
       wv.loadUrl("about:blank");
       wv.pauseTimers(); //new code
       wv = null;
    

    public String getHTML() 
        String html = "<iframe width=\"100%\" height=\"100%\" src=\"https://www.youtube.com/embed/hEFqVV5q44E?rel=0&amp;controls=0&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>";
        return html;
    




这是代码不起作用的片段

public class FrTabDescriptionWebView extends Fragment 
    public static final String TAG = FrTabDescriptionWebView.class.getName();


    private WebView wv;


    public static FrTabDescriptionWebView newInstance() 
        FrTabDescriptionWebView fragment = new FrTabDescriptionWebView();

        return fragment;
    

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);


    

    public FrTabDescriptionWebView() 
    



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        super.onCreateView(inflater, container, savedInstanceState);
        return inflater.inflate(R.layout.activity_prova_webview, null);

    




    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);
        wv = (WebView) view.findViewById(R.id.webview);
        WebSettings settings = wv.getSettings();
        wv.setWebChromeClient(new WebChromeClient() 
        );
        final String mimeType = "text/html";
        final String encoding = "UTF-8";
        String html = getHTML();
        settings.setJavaScriptEnabled(true);
        wv.loadDataWithBaseURL("", html, mimeType, encoding, "");

    

    public String getHTML() 
        String html = "<iframe width=\"100%\" height=\"100%\" src=\"https://www.youtube.com/embed/hEFqVV5q44E?rel=0&amp;controls=0&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>";
        return html;
    



我到底做错了什么??

我也尝试使用 WebViewFragment 将 wv 替换为 getWebView,但问题仍然存在

感谢您的帮助

【问题讨论】:

将你所有的代码从onCreated(..)移动到onCreateView(...) 刚刚尝试过:问题仍然存在 【参考方案1】:

将所有代码从 onCreated(..) 移动到 onCreateView(...)。并删除

super.onCreateView(inflater, container, savedInstanceState);

更正:

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

    View view=inflater.inflate(R.layout.activity_prova_webview, null);

    wv = (WebView) view.findViewById(R.id.webview);
    WebSettings settings = wv.getSettings();
    wv.setWebChromeClient(new WebChromeClient() 
    );
    final String mimeType = "text/html";
    final String encoding = "UTF-8";
    String html = getHTML();
    settings.setJavaScriptEnabled(true);
    wv.loadDataWithBaseURL("", html, mimeType, encoding, "");

   return view;


输出:

【讨论】:

不应该 onViewCreated 比 onCreateView 更好吗?在 onViewCreated 中,视图已准备就绪 @SimonVeloper 好的,那么你应该试试这个way wv = (WebView) getView().findViewById(R.id.webview); 刚刚尝试过:问题仍然存在 我尝试了这两个建议 @SimonVeloper 不,这不可能。当我尝试第一个时,它在我的情况下是完美的。【参考方案2】:

我发现了问题:

我有另一个 Activity 显示嵌入 youtube 视频的 WebView,并在关闭 Activity 时停止我在完成方法中使用此代码

       wv.clearHistory();
       wv.clearCache(true);
       wv.loadUrl("about:blank");
       wv.pauseTimers();
       wv = null;

避免此代码使片段工作。我认为导致问题的真正代码是

 wv.pauseTimers();

确认

经过一些测试,我可以确认真正的问题是

wv.pauseTimers();

删除此行一切正常,使 youtube 视频停止播放此代码工作正常

wv.clearHistory();
           wv.clearCache(true);
           wv.loadUrl("about:blank");
           wv = null;

【讨论】:

以上是关于android webview不加载片段的主要内容,如果未能解决你的问题,请参考以下文章

Android开发基础之控件WebView

Android开发基础之控件WebView

详解Android WebView加载html片段

Android - 恢复 Fragment WebView 状态以避免重新加载

如何在android Fragment中为webview显示全屏加载微调器?

Android - WebView 在简历中死亡