如何在BottomNavigationView的Fragment中添加WebView?(Android Studio-Java)
我来帮你搞定这个需求,咱们一步步修正代码,实现三个标签页的不同功能:Home加载主页网站、COVID-19 Tracker加载新冠追踪网站、Dashboard显示自定义内容(不需要WebView)。
先说说你现有代码的几个小问题
- 你在
onCreate里重新定义了局部变量WebView myWebView,导致成员变量myWebView一直是空的,底部导航监听里调用myWebView.loadUrl()会直接崩溃 - 导航项的逻辑和你需求不匹配,当前代码里的三个case对应了错误的页面,而且没处理Dashboard标签页隐藏WebView的逻辑
- 布局里缺少Dashboard标签页需要展示的内容视图
修正后的完整代码
1. MainActivity.java
package com.example.user.test; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private WebView myWebView; private TextView dashboardTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化WebView和Dashboard的TextView myWebView = findViewById(R.id.webview1); dashboardTextView = findViewById(R.id.dashboard_text); // WebView基础配置 myWebView.setWebViewClient(new WebViewClient()); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); String userAgent = webSettings.getUserAgentString(); webSettings.setUserAgentString(userAgent + "appwebview"); // 初始化加载Home页面 loadHomePage(); // 设置底部导航监听 BottomNavigationView navigation = findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); } private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_home: loadHomePage(); return true; case R.id.navigation_covid_tracker: loadCovidTrackerPage(); return true; case R.id.navigation_dashboard: showDashboardContent(); return true; } return false; } }; // 加载Home页面 private void loadHomePage() { myWebView.setVisibility(WebView.VISIBLE); dashboardTextView.setVisibility(TextView.GONE); myWebView.loadUrl("http://test.net"); } // 加载COVID-19 Tracker页面 private void loadCovidTrackerPage() { myWebView.setVisibility(WebView.VISIBLE); dashboardTextView.setVisibility(TextView.GONE); myWebView.loadUrl("http://test.net/covid-tracker"); // 替换成你的新冠追踪网站实际URL } // 显示Dashboard内容(隐藏WebView) private void showDashboardContent() { myWebView.setVisibility(WebView.GONE); dashboardTextView.setVisibility(TextView.VISIBLE); dashboardTextView.setText("这是Dashboard标签页的自定义内容"); } }
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.user.test.MainActivity"> <!-- WebView区域,权重设为1占满剩余空间 --> <WebView android:id="@+id/webview1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <!-- Dashboard标签页的内容,默认隐藏 --> <TextView android:id="@+id/dashboard_text" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:textSize="20sp" android:visibility="gone" /> <!-- 底部导航栏 --> <android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" app:menu="@menu/navigation" /> </LinearLayout>
3. res/menu/navigation.xml(如果没有就新建)
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_home" android:icon="@drawable/ic_home_black_24dp" android:title="Home" /> <item android:id="@+id/navigation_covid_tracker" android:icon="@drawable/ic_bar_chart_black_24dp" android:title="COVID-19 Tracker" /> <item android:id="@+id/navigation_dashboard" android:icon="@drawable/ic_dashboard_black_24dp" android:title="Dashboard" /> </menu>
额外注意事项
- 别忘了在
AndroidManifest.xml里添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 如果你使用的是AndroidX,需要把
android.support相关的依赖替换成AndroidX的(比如androidx.appcompat.app.AppCompatActivity、com.google.android.material.bottomnavigation.BottomNavigationView),避免兼容性问题
内容的提问来源于stack exchange,提问作者Raj Scape Android Apps
相关产品推荐
相关产品推荐

