gma*_*gma 8 android android-fragments synthetic android-activity android-viewbinding
我正在升级一个应用程序以删除所有合成内容并使用新的 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
}
Run Code Online (Sandbox Code Playgroud)
在 MainActivity 中我有:
private lateinit var mainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(null)
mainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mainBinding.root)
}
Run Code Online (Sandbox Code Playgroud)
我有一些对话框方法,它们使用合成材料来调暗片段中的布局元素。例如。
//textView on fragment layout.xml
textView?.alpha = someFloat
Run Code Online (Sandbox Code Playgroud)
这在合成时工作得很好,但是我无法根据 Android 的文档让新的视图绑定工作。如何使用 ViewBinding 轻松模仿合成行为?到目前为止,它已经增加了大量的代码,除非创建了 Fragment 的视图,否则它无法工作,并且确实使代码变得更糟,更难以理解。我尝试使用主活动布局根视图的绑定,但出现“视图必须有标签”错误,并且所有布局都以<layout>. 任何帮助表示赞赏。
如果您想从活动中访问片段中的视图绑定,简单的答案是您不能。因为您无法从活动访问片段中的任何属性。
反之亦然,您可以从片段访问活动属性。将您的财产之一公开,并使用 进行访问requireActivity().propertiesInActivity,例如:
活动中:
lateinit var bind: ActivityYourBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityYourBinding.inflate(layoutInflater)
...
}
Run Code Online (Sandbox Code Playgroud)
在 Fragment 中(该片段的父级是 YourActivity):
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
...
var someFloat = 0 // fill with your number
val yourActivity = requireActivity() as YourActivity
yourActivity.bind.yourTextView.alpha = someFloat
...
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助任何人并解决他们的问题
由于你的问题很抽象,我想出了以下内容
textView?.alpha = someFloat
Run Code Online (Sandbox Code Playgroud)
会成为
如果您的文本视图位于片段中
binding.textView.alpha = someFloat
Run Code Online (Sandbox Code Playgroud)
如果是在活动中
mainBinding.textView.alpha = someFloat
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6120 次 |
| 最近记录: |