android 从活动访问片段中的视图绑定

ogq8wdun  于 2022-12-21  发布在  Android
关注(0)|答案(2)|浏览(149)

我正在升级一个应用程序,以删除所有合成并使用新的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>开头。

ghhkc1vu

ghhkc1vu1#

如果你想从activity访问fragment中的视图绑定,简单的答案是你不能,因为你不能从activity访问fragment中的任何属性。
反之,也可以从fragment中访问activity属性,将其中一个属性设置为public,使用requireActivity().propertiesInActivity进行访问,例如:
活动中:

lateinit var bind: ActivityYourBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityYourBinding.inflate(layoutInflater)
    ...
}

在片段中(此片段父级为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
        ...
}

希望这能帮助任何人,解决他们的问题

ippsafx7

ippsafx72#

由于你的问题比较抽象,我想了以下几点

textView?.alpha = someFloat

会变成
如果文本视图在片段中

binding.textView.alpha = someFloat

如果是在活动中

mainBinding.textView.alpha = someFloat

相关问题