Fragment和Activity最佳通信方式就是它--共享ViewModel_android fragment和activity通信的的viewmodl

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    return shellMainViewModel
}

override fun initView() {
    //初始化fragment
    val shellMainViewPager2Adapter = ShellMainAdapter(this
        , arrayListOf(mShellMainFragment
            ,mShellMainPluginFragment
            ,mShellMainSettingFragment))
    shellMainViewPager2.adapter = shellMainViewPager2Adapter
    ViewPager2Delegate.install(shellMainViewPager2,shellMainTabLayout)
}

override fun initData() {
    //对共享fragment里的值进行观察,同时弹出toast
    sharedViewModel.testLiveData.observe(this,{
        Toast.makeText(this, "$it", Toast.LENGTH_SHORT).show()
    })
}

override fun startObserve() {

}
//分别添加3个子fragment
inner class ShellMainAdapter(activity: FragmentActivity, private val fragmentList: List<Fragment>)
    : FragmentStateAdapter(activity){

    override fun getItemCount(): Int {
        return fragmentList.size
    }

    override fun createFragment(position: Int): Fragment {
        return fragmentList[position]
    }

}

}
复制代码


看一下共享ViewModel代码:



@HiltViewModel
class ShellMainSharedViewModel @Inject constructor() : BaseViewModel() {

val testLiveData = MutableLiveData<String>("00")

fun setValue(view: View){
    val random = (1 .. 100).random().toString()
    Log.i(TAG, "setValue: 随机数 $random")
    testLiveData.value = random
}

}
复制代码


这里非常简单,就是一个LiveData,然后接着看一下Fragment,


这里的注意点是Fragment自己的ViewModel使用viewModels来获取,对于要和整个activity生命周期共享的ViewModel使用activityViewModels来获取:



@AndroidEntryPoint
class ShellMainFragment : BaseVMFragment() {

private val shellMainFragmentViewModel: ShellMainFragmentViewModel by viewModels()
//获取共享ViewModel
private val shellMainSharedViewModel: ShellMainSharedViewModel by activityViewModels()

override fun getLayoutResId(): Int = R.layout.fragment_shell_main

override fun initVM(): ShellMainFragmentViewModel {
    return shellMainFragmentViewModel
}
//依次绑定2个viewModel
override fun initView() {
    mBinding.setVariable(BR.sharedViewModel,shellMainSharedViewModel)
    mBinding.setVariable(BR.viewModel,shellMainFragmentViewModel)
}

override fun initData() {
}

override fun startObserve() {
}

}
复制代码


然后在xml中,有一个textView控件可以显示viewModel中的值,以及修改值:



<?xml version="1.0" encoding="utf-8"?>

<data>

    <variable
        name="viewModel"
        type="com.wayeal.yunapp.shell.mvvm.main.ShellMainFragmentViewModel" />

    <variable
        name="sharedViewModel"
        type="com.wayeal.yunapp.shell.mvvm.main.ShellMainSharedViewModel" />

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".shell.mvvm.main.ShellMainFragment"
    android:orientation="vertical"
    >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="首页" />

    <TextView
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{sharedViewModel.testLiveData}"
        android:textSize="20sp"
        android:textColor="@color/black"
        />

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值