【发布时间】:2017-06-11 15:31:01
【问题描述】:
尝试使用 Android 的 Data Binding 来适配 ViewPager(控制可滑动的 Fragments)。
FooPagerAdapter.kt:
class FooPagerAdapter(fm: Fragmentmanager, private val mFragments: List<BarFragment>) : FragmentStatePagerAdapter(fm) {
override fun getItem(position: int): Fragment {
return mFragments(position)
}
override fun getCount(): Int {
return mFragments.size
}
}
如果从 Activity 完成,它看起来像:
..
mFooViewPager.adapter = FooPagerAdapter(fragmentFamanager, fragmentsList)
..
问题:
现在如何将适配器功能传输到绑定文件以使用数据绑定更新片段 ViewPager?
编辑:
据我所知,它必须是这样的。
activity_foo.xml:
<android.support.v4.view.ViewPager
..
app:fragments"${viewModel.fragments}"/>
然后在 FooViewModel.kt:
fun getFragments(): LiveData<List<BarFragment>>? = mFragments
companion object {
@BindingAdapter("bind:fragments")
fun setAdapter(pager: ViewPager, adapter: BarPagerAdapter) {
pager.adapter = adapter
}
}
编辑2:
决定直接使用ViewModel(不绑定)来设置ViewPager的适配器。
activity_foo.xml:
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.foo.bar.viewmodels.FooViewModel"/>
</data>
..
<android.support.v4.view.ViewPager
..
app:adapter="%{viewModel.adapter}"/>
FooViewModel.kt:
class FooViewModel(application: Application) : AndroidViewModel(application) {
..
fun setAdapter(pager: ViewPager, fragments:List<PeriodFragment>) {
pager.adapter = PeriodsPagerAdapter(mFragmentManager!!, periods)
}
获取:
错误:...layout\activity_foo.xml:39 属性 'com.foo.bar:adapter' 未找到
【问题讨论】:
-
@tynn 好吧,我(我自己)想看一个最简单的例子:-)
-
那么这个问题太宽泛了。有不同的可能方法可以做到这一点。您应该尝试一下,当您遇到问题时,请返回这里寻求一些解决方案。
-
@tynn 我已经更新了问题,请参阅编辑。
-
应该是
app:adapter="@{viewModel.adapter}"。您需要使用@而不是%或$以便识别绑定。
标签: android android-fragments kotlin