将ViewModel保留在片段中

时间:2018-04-09 07:44:28

标签: android android-viewmodel

我与ViewModel和片段进行合作,并希望保留我的ViewModel片段,以便更改轮播。将Fragment传递给ViewModelProviders.of()时,它不会被保留,但是当我传递片段所属的Activity时,它会被保留。所以通过活动应该如何使用它? 在ViewModelProviders.of(this)中呼叫Fragment不会保留我的ViewModel。这是预期的行为吗?

class MainFragment : Fragment() {

    private lateinit var viewModel: MainViewModel

    fun OnXXXXXXXXX {
        // This _will NOT_ retain ViewModel
        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

        // This _will_ retain ViewModel
        viewModel = ViewModelProviders.of(activity).get(MainViewModel::class.java)
    }
}

1 个答案:

答案 0 :(得分:1)

是的,它的预期行为,请查看this content

  

片段可以使用其活动范围共享ViewModel来处理此通信

如果要共享相同的ViewModel,请使用相同的上下文。例如,同一活动有多个片段:

const same = (...xs) => new Set (xs).size === 1

const x = 'aaa'
const y = 'aaa'
const z = 'aaa'

const areSame = same (x, y, z)

console.log(areSame)

const x_ = 'aaa'
const y_ = 'bbb'
const z_ = 'aaa'

const areSame_ = same (x_, y_, z_)

console.log (areSame_)