Kotlin如何通过点击按钮跳转指定Activity并修改其内部WebView的URL
错误原因
你在当前MainActivity中直接引用了另一个WebView页面的控件,此时目标WebView Activity还未启动、布局尚未加载,webViewArticle属于空对象,调用loadUrl就会触发空指针异常。同时注意不要将承载WebView的自定义Activity命名为WebView,会和系统原生的android.webkit.WebView类冲突,导致跳转逻辑错误。
解决方案
1. 主页面通过Intent携带URL传递到目标页面
在MainActivity的点击事件中,仅做跳转和传参操作,不要尝试直接操作目标页面的控件:
// 注意替换WebViewActivity为你自定义的承载WebView的Activity类名 val intent = Intent(this, WebViewActivity::class.java) // 将要加载的URL存入Intent的额外参数中 intent.putExtra("TARGET_URL", "http://www.google.com") startActivity(intent)
2. 目标WebView页面接收参数并加载内容
在承载WebView的Activity的onCreate生命周期中,先完成布局和控件初始化,再读取参数加载URL:
class WebViewActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 先加载你的WebView所在的布局文件 setContentView(R.layout.activity_webview) // 初始化WebView控件 val mwebViewArticle = findViewById<WebView>(R.id.webViewArticle) // 可选配置:开启JS支持,大部分现代网页需要该配置 mwebViewArticle.settings.javaScriptEnabled = true // 读取传递过来的URL参数 val targetUrl = intent.getStringExtra("TARGET_URL") // 非空校验后加载网页 targetUrl?.let { url -> mwebViewArticle.loadUrl(url) } } }
额外注意事项
- 需要在
AndroidManifest.xml中添加网络权限,否则WebView无法加载在线网页:<uses-permission android:name="android.permission.INTERNET" /> - 如果加载的网页有HTTPS混合内容的问题,可以额外配置WebView的混合内容加载模式,适配不同系统版本。
内容的提问来源于stack exchange,提问作者zain mahmood
相关产品推荐
相关产品推荐

