【发布时间】:2020-05-08 13:18:00
【问题描述】:
我正在尝试在我的所有应用程序中实现 MVVM,我对此很陌生,所以我想通过我的 ViewModel 加载 webview,但我不知道如何做到这一点的最佳方法,如果也有加载我的网络视图时显示的进度条。
代码如下:
class NewWebViewFragment : Fragment() {
private lateinit var viewModel: NewWebViewViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding: FragmentWebViewBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_web_view, container, false)
val webViewModelo = ViewModelProviders.of(this).get(NewWebViewViewModel::class.java)
binding.webViewModel = webViewModelo
binding.lifecycleOwner = this
return binding.root
}
}
现在是我的 ViewModel:
class NewWebViewViewModel : ViewModel() {
//Implement in MVVM
private fun showWebView(webView: WebView, progressBar: ProgressBar) {
webView.webViewClient = WebViewClient()
webView.webChromeClient = WebChromeClient()
val webSettings = webView.settings
webSettings.javaScriptEnabled = true
webView.loadUrl("https://brand.randombrand.com/en/")
webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
progressBar.visibility = View.VISIBLE
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
progressBar.visibility = View.GONE
super.onPageFinished(view, url)
}
}
}
}
还有我的 XML:
<layout
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">
<data>
<variable
name="webViewModel"
type="com.example.navigations.viewmodel.webview.NewWebViewViewModel" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".fragments.WebViewFragment">
<!-- TODO: Update blank fragment layout -->
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
</WebView>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_gravity="center"/>
</FrameLayout>
</layout>
我得到的错误是nullpointerexception,因为我传递的 webview 为空。
对实现这一点的最佳方法有什么想法吗?
【问题讨论】:
标签: android kotlin mvvm webview