android - 如何从活动更新片段中的视图
问题描述
我正在使用布尔值来更新片段中的视图。
它正在从片段中工作,但是在活动中有触发布尔值的代码,但是直到我再次手动转到片段之前,视图没有得到更新。
活动代码:
billingClientLifecycle.purchaseUpdateEvent.observe(this, Observer {
it?.let {
Log.d("King", "John it 1$it")
registerPurchases(it)
subbed = if (it.isEmpty()) {
Log.d("King", "inside empty")
false
} else {
Log.d("King", "inside not empty")
true
}
}
})
片段代码
if (subbed){
Log.d("King", "insideifsubbed$subbed")
matchesBinding.homeBasicMessage.visibility = View.VISIBLE
matchesBinding.homePaywallMessage.visibility = View.GONE
matchesBinding.homeAccountHoldMessage.visibility = View.GONE
matchesBinding.homeTransferMessage.visibility = View.GONE
}else{
matchesBinding.homeBasicMessage.visibility = View.GONE
matchesBinding.homeAccountHoldMessage.visibility = View.GONE
matchesBinding.homeTransferMessage.visibility = View.GONE
matchesBinding.homePaywallMessage.visibility = View.VISIBLE
Log.d("King", "insideelsesubbed$subbed")
}
解决方案
在您的中实现一个侦听器,Fragment
以便您Activity
每次想要更新任何新信息时都可以向它发送回调。
例如,您可以创建
interface SubbedUpdateListener {
fun onSubUpdate(subbed: Boolean)
}
并实现相关字段和设置器
var mSubbedUpdateListener: SubbedUpdateListener? = null; private get
fun setSubbedUpdateListener(subbedUpdateListener: SubbedUpdateListener){
mSubbedUpdateListener = subbedUpdateListener
}
最后是调用代码:
billingClientLifecycle.purchaseUpdateEvent.observe(this, Observer {
it?.let {
Log.d("King", "John it 1$it")
registerPurchases(it)
subbed = if (it.isEmpty()) {
Log.d("King", "inside empty")
false
} else {
Log.d("King", "inside not empty")
true
}
if(mSubbedUpdateListener != null){
mSubbedUpdateListener.onSubUpdate(subbed)
}
}
})
在你的内部Activity
,当你创建新的Fragment
,在onAttach
或onCreate
方法内部时,你可以使用context
传入的,这应该是你的调用Activity
,将它转换为你的Activity
类,然后调用activity.setSubbedUpdateListener(this)
如果你使用Fragment
to implements SubbedUpdateListener
。否则,您还可以传入SubbedUpdateListener
. 在实现内部,您可以检查:
override fun onSubUpdate(subbed: Boolean){
if (subbed){
Log.d("King", "insideifsubbed$subbed")
matchesBinding.homeBasicMessage.visibility = View.VISIBLE
matchesBinding.homePaywallMessage.visibility = View.GONE
matchesBinding.homeAccountHoldMessage.visibility = View.GONE
matchesBinding.homeTransferMessage.visibility = View.GONE
}else{
matchesBinding.homeBasicMessage.visibility = View.GONE
matchesBinding.homeAccountHoldMessage.visibility = View.GONE
matchesBinding.homeTransferMessage.visibility = View.GONE
matchesBinding.homePaywallMessage.visibility = View.VISIBLE
Log.d("King", "insideelsesubbed$subbed")
}
}
编辑:对不起。刚刚意识到你在 Kotlin 中的写作,我正在用 Java 做我的例子。
推荐阅读
- javascript - 当索引满足另一个条件时,查找 Javascript 数组元素的值和索引
- redux - 静态页面数据 - Redux 还是 Vanilla JS?
- javascript - 替换php元素(图像和名称),在js中点击
- html - 如何将 Div 与英雄图像重叠以实现 Material-Design 外观?
- netbeans - 将 Netbeans Projects 文件夹移动到云
- excel - 如果在另一列中更改了多个单元格,则更新一列中的多个单元格
- html - 用jquery制作html5画布整页
- c - 如何链接到其中包含 main 的对象?
- c# - 如何通过 ac# Windows 窗体应用程序读取和更新外部 web.config
- java - 如何转换列表
使用 XMLMapper (Jackson) 到 XML 对象?