You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * A simple {@link MVVMFragment} subclass. * Use the {@link MobileWebFragment#newInstance} factory method to * create an instance of this fragment. */@AndroidEntryPointpublicclassMobileWebFragmentextendsMVVMFragment<MobileWebViewModel> {
publicMobileWebFragment() {
super(MobileWebViewModel.class,R.layout.fragment_mobile_web, BR.dataContext);
}
/** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @return A new instance of fragment MobileWebFragment. */publicstaticMobileWebFragmentnewInstance() {
returnnewMobileWebFragment();
}
@OverridepublicvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
}
@OverridepublicvoidonViewCreated(@NonNullViewview, @NullableBundlesavedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Stringurl = MobileWebFragmentArgs.fromBundle(this.getArguments()).getUrl();
this.viewModel.setUrl( "https://test.space365.live/app" + url );
this.viewModel.getBackSignal().observe( this.getViewLifecycleOwner() , back ->{
if( back ){
Navigation.findNavController(view).popBackStack();
}
} );
}
}
前言
我们知道安卓的世界WebView控件就是Chrome的实现的浏览器。
目前我们对WebView的用法还毕竟“肤浅”,只是当一个浏览器在用。我们知道对于App来说只是嵌入一个浏览器是远远不够的,类似支付宝微信等App已经在BS端做到了你中有我,我中有你的深入对接。
web -> app 端的交互实现
我们还是从实际项目出发也着手这方面问题,比如Web页面有个返回按钮,他已经到到最外层。在点击后,其实已经交给App去处理了,需要退出当前页面,回到堆栈上一层。要怎么实现那?
实现过程
需要声明js到function,windows.<模块名>.<方法名>
需要调用setJavaScriptEnabled和addJavascriptInterface这两个api
其中
ojb:JavascriptInterface的实现
interfaceName:模块名
对于JavescriptInterface的定义,需要实现back方法
3.结合MVVM实现
应该我们都是严格按照MVVM的架构来实现的。所以怎么“融入”?
先上粘合剂BindingAdapter
索性和url的绑定一并收编整合了,jsObject和jsName作为可选参数
直接ViewModel和JavescriptInterface合并,违和感完全没有问题
View肯定是不能缺少的一环
layout需要把所有绑定必须的属性和绑定适配器配合起来
作为安卓的必备组件,这算不上MVVM的部分,但是是MVVM的载体,它作为一个整体去支撑起了MVVM,是一个被“架空业务逻辑”的核心,只可意会不可言传。还是上代码吧,慢慢意会。
主要安卓的MVVM,每一层都“没有资格”去处理退栈操作。只有核心组件Activity/Fragment能做。所以只能勉为其难让他代劳啦。
这里退栈操作和导航相关,不详细展开了。
参考
The text was updated successfully, but these errors were encountered: