如何在Fragment类中加载WebView?如何在Android中加载WebView?

4

我正在尝试在一个Fragment中创建WebView,并加载它。我已经将它添加到xml文件中。然而,findViewById方法只有在扩展Activity类时才能起作用。是否有任何方法可以在Fragment中使用它?

我已经测试了另一个问题的解决方案,但它不起作用。

public class OneFragment extends Fragment{

public WebView PlanWebView;

public OneFragment() {
    // Required empty public constructor
}

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

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    PlanWebView WebView = (PlanWebView) getView().findViewById(R.id.PlanWebView);
    // Unknown class: "PlanWebView";
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_one, container, false);
}

}
3个回答

3
请尝试这个,请看这个OneFragment类,Webview需要一个视图,该视图必须使用xml进行膨胀。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view=inflater.inflate(R.layout. fragment_one, container, false);
    mWebView = (WebView) view.findViewById(R.id.webview);
    mWebView.loadUrl("https://google.com");

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());

    return view;
}

xml 一起使用于片段一

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

谢谢回答! 我有另一个问题...我该如何在Fragment中重新加载此WebView? 如果没有Fragments并且在单个MainActivity中,这非常容易...我在MainActivity中添加了一个菜单,但我必须在哪里添加公共布尔值以用于菜单?如果我将其添加到One_Fragment.class中,则在菜单中按更新按钮后会崩溃。 - user8399353
@Override public boolean onOptionsItemSelected(MenuItem menuitem) { int id = menuitem.getItemId(); if (id == R.id.update) { OneFragment.this.PlanWebView.loadUrl("http://google.de"); } return false; } - user8399353
你好,能否请您解释一下您的新问题,我无法理解。您是指您想从主活动重新加载Web视图吗? - Quick learner
看看这个,试一下。 - Quick learner
谢谢,但是这个解决方案会在同一个片段上打开相同的片段。然而,只有在菜单中按下更新按钮时,WebView 中的 URL 应该重新加载。 - user8399353
显示剩余2条评论

0

在 Fragment 中,你可以在 onCreateView 方法中声明变量。

public class OneFragment extends Fragment{

public WebView PlanWebView;

public OneFragment() {
// Required empty public constructor
}

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

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {


 }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_one, container, false);
PlanWebView  = (WebView)view.findViewById(R.id.PlanWebView);
return view;
   }

 }

0

您应该在 onCreateView 方法中使用以下代码:

View view = inflater.inflate(layout,container,false);

WebView webview = (WebView) view.findViewById(R.id.webView);

return view;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接