簡體   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