android-activity - 如何从片段 recyclerView 更新活动视图
问题描述
我有 MainActivity,它有 AppBar(带有“购物车”TextView)和 FrameLayout(带有包含 RecyclerView 的 Fragment)。这个 RecyclerView 有一个增加购物车值计数的按钮。我希望该计数更新 MainActivity 中的购物车值。
我找到了这个但没有完整的解释“从 RecyclerView 适配器更新 Activity 或 Fragment 的视图”。
解决方案
没有比这更好的解决方案ViewModel
首先添加这个依赖build.gradle
:implementation 'android.arch.lifecycle:extensions:1.1.1'
您的ViewModel
课程将如下所示:
class MyViewModel: ViewModel() {
val mCartInfo: MutableLiveData<Int> = MutableLiveData()
private var cnt = 0
fun addToCartCounter() {
//TODO Apply your logic here
mCartInfo.value = cnt++
}
}
是什么
LiveData
?看这里
之后,您必须初始化ViewModel
并观察更改的数据,所有这些事情都将在您的 AppBar 中完成Activity
:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
//These will observe any changes happen in ViewModel's MutableLiveData(it'll directly jump inside Observer)
//Observer is main important thing
myViewModel.mCartInfo.observe(this, Observer {
//tvCartCounter is Toolbar's TextView
tvCartCounter.text = it.toString()
})
}
}
进入ViewModel
您Fragment
和您的按钮单击调用 ViewModel 的方法:
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val rootView = inflater.inflate(R.layout.fragment_blank, container, false)
//Get your Activity's ViewModel
val myViewModel = ViewModelProviders.of(requireActivity()).get(MyViewModel::class.java)
//Button click
rootView.btnAddToCart.setOnClickListener {
//It'll call ViewModel's method
myViewModel.addToCartCounter()
}
return rootView
}
}
每当
addToCartCounter
() 调用您的按钮单击时,它会在MutableLiveData
触发您的观察者后不久添加价值。
推荐阅读
- java - transformClassesWithDexBuilderForDebug 卡住了
- c - C 中的 Tee 函数调用不起作用,也不是 tee 命令
- android - How to get document from "Firestore" using compound query in android
- excel - How to update the range in powerpoint chart from excel
- javascript - When user scrolls down to image position, execute transformation
- javascript - Concise way to get to final output from selenium webdriver promises
- php - 如何在不拒绝访问控制器的情况下使用 Symfony 4 Voters
- ios - 企业应用程序是否会在推送证书和/或配置文件到期/撤销时失效?
- java - AspectJ - 来自外部 JAR 的方面
- kubernetes - RabbitMQ 管理 - 加载队列或交换时出现 404