findViewById () возвращает нулевое представление, созданное из привязки данных - PullRequest
1 голос
/ 25 октября 2019

По какой-то причине, когда я использую findFragmentById () для ссылки на представление SeekBar, созданное с привязкой данных, он возвращает нулевой объект. Как я могу получить ссылку для этого представления, пожалуйста?

Это мой seekBar:

<?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>

Это мой класс:

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

Панель поиска завышенаиспользуя 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)
...
}

1 Ответ

0 голосов
/ 25 октября 2019

Вы должны указать родительский вид макета.

 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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...