WebView使用(一) 无法显示内容、在fragment+activity中的使用

在一个只有底部导航栏的activity中,动态切换4个fragment,在第一个fragment中我想使用一个webview加载后台的H5页面,就把WebView定义在了fragment的布局文件中,如下

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/home_web"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</FrameLayout>


activity的webview部分代码 是 

 

 home_web = fView(R.id.home_web);
        //设置WebView属性,能够执行Javascript脚本
        home_web.getSettings().setJavaScriptEnabled(true);
        home_web.loadUrl(UrlManager.HomeUrl);
        LogUtil.getInstance().Info("加载页面");
        home_web.setWebViewClient(new HomeWebClient());
   public class HomeWebClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
以下是activity切换fragment的代码
fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.showFrag, new O2OFragment());
                fragmentTransaction.commit();



 然而以上代码执行过后并没有显示 ,而放在activity中却能正常显示。我采用了网友的方法:

[java]  view plain  copy
  1. getFragmentManager().beginTransaction().add(android.R.id.content,one,"qe").commit();  
原来我使用的不是android.R.id.content这个值,而是设置到自己定义的一个。这样就能显示了,但是fragment的页面覆盖了底部的导航栏;  已解决: 在activity 的布局文件中,添加一个线性布局(也有朋友说加一行空白也行),加上id,然后传参到
 fragmentTransaction.replace(R.id.showFrag, new O2OFragment());
的 第一个参数上,这样就好了;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Android Studio 开发使用 WebViewFragment 可以方便地释放 webview,以下是使用 WebViewFragment 的步骤: 1. 新建一个 WebViewFragment 类。 2. 在 WebViewFragment,创建一个 webview,并将其添加到 Fragment 。代码如下: ```java public class WebViewFragment extends Fragment { private WebView webView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_webview, container, false); webView = (WebView) view.findViewById(R.id.webview); webView.loadUrl("http://www.example.com"); return view; } @Override public void onDestroyView() { super.onDestroyView(); if (webView != null) { webView.stopLoading(); webView.removeAllViews(); webView.destroy(); webView = null; } } } ``` 3. 在 Activity 使用 FragmentManager 将 WebViewFragment 添加到 Activity 。代码如下: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 添加 WebViewFragmentActivity FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); WebViewFragment webViewFragment = new WebViewFragment(); fragmentTransaction.replace(R.id.fragment_container, webViewFragment); fragmentTransaction.commit(); } } ``` 在上述代码WebViewFragment 的 onDestroyView() 方法,手动释放了 webview,这样可以有效地释放 webview,避免 webview 占用资源过久,从而导致内存泄漏的问题。在 Activity ,可以通过 FragmentManager 将 WebViewFragment 添加到 Activity ,并在需要释放 webview 的时候,将 WebViewFragment 替换成一个空的 Fragment,从而达到释放 webview 的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值