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&controls=0&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&controls=0&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 - 恢复 Fragment WebView 状态以避免重新加载