繁体   English   中英

findViewById() 返回从数据绑定创建的 Null 视图

[英]findViewById() Returns Null View Created From Databinding

出于某种原因,当我使用 findFragmentById() 引用使用数据绑定创建的 SeekBar 视图时,它返回 null object。 请问,我怎样才能得到这个观点的参考?

这是我的搜索栏:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </SeekBar>
</layout>

这是我的 class:

open class UtilClass(activity: Activity) {
...
val seekBar = activity.findViewById<SeekBar>(R.id.seekBar)
..
}

在它自己的 Fragment 中使用 DataBindingUtil 对搜索栏进行膨胀:

class SeekBarFragment(): Fragment {
...
override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding: SeekbarBinding = DataBindingUtil.inflate(inflater, R.layout.seekbar, container, false)
...
}

UtilClass 在这里被实例化:

class MainActivity : AppCompatActivity() {

private lateinit var mUtilClass: UtilClass
....
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mUtilClass = UtilClass(requireActivity())
    retainInstance = true

    var fm = fragmentManager
    var fragment: Fragment? = fm!!.findFragmentById(R.id.seek_container)

    if (fragment == null) {

        fragment = SeekBarFragment.newInstance()

        fm.beginTransaction()
            .add(R.id.seek_container, fragment)
            .commit()
            }
}

绑定在这里创建:

class SeekBarFragment: Fragment() {

companion object {
    fun newInstance(): SeekBarFragment {
        return SeekBarFragment()
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    super.onCreate(savedInstanceState)
}

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val binding: SeekbarBinding = DataBindingUtil.inflate(inflater, R.layout.seekbar, container, false)
...
}

您应该指定父布局视图。

 override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        var v: View =inflater.inflate(R.layout.seekbar, container, false)
        var seekbar=v.findViewById(R.id.seekbar)

return v

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM