我正在升级一个应用程序,以删除所有合成并使用新的ViewBinding特性。到目前为止,只要你在你正在访问的类/布局内部,一切都工作正常,但我在我的主活动中有布局元素的合成引用。
在类片段中:
private var _binding: FragmentBinding? = null
val binding get() = _binding!!
private val compositeDisposable = CompositeDisposable()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
App.instance.getAppComponent().inject(this)
_binding = FragmentBinding.inflate(inflater, container, false)
return binding.root
}
在主活动中,我有:
private lateinit var mainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(null)
mainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mainBinding.root)
}
我有方法的对话框使用合成暗淡布局元素的片段。
//textView on fragment layout.xml
textView?.alpha = someFloat
合成的时候效果很好但是我无法让新的视图绑定基于Android的文档工作。我如何轻松地模仿ViewBinding的合成行为?到目前为止,它增加了大量的代码,除非创建了Fragment的视图,否则无法工作,老实说,它使代码更糟,更难理解。我试图使用绑定关闭主活动布局根视图,但我得到了“视图必须有一个标签”的错误,所有的布局都以<layout>
开头。
2条答案
按热度按时间ghhkc1vu1#
如果你想从activity访问fragment中的视图绑定,简单的答案是你不能,因为你不能从activity访问fragment中的任何属性。
反之,也可以从fragment中访问activity属性,将其中一个属性设置为public,使用
requireActivity().propertiesInActivity
进行访问,例如:活动中:
在片段中(此片段父级为YourActivity):
希望这能帮助任何人,解决他们的问题
ippsafx72#
由于你的问题比较抽象,我想了以下几点
会变成
如果文本视图在片段中
如果是在活动中