【发布时间】:2020-12-27 13:42:23
【问题描述】:
我开始迁移到片段并希望在它们之间滑动。我遵循了各种教程,被卡住了,被卡住了,又被卡住了(通常)。
目前我一直在尝试设置我的 viewpager。在开始之前,我将部分视图移动到片段,并使用下面链接到框架布局的代码成功地将片段加载到我的活动中。所以我的片段有效(结果 1);
val fragment : WonGamesByDiff = WonGamesByDiff.newInstance()
val ft: FragmentTransaction = supportFragmentManager.beginTransaction()
ft.replace(R.id.fragment_container,fragment)
ft.commit()
在我的框架布局下,我添加了
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager_fragments"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
我已经根据几个不同的教程创建了一个适配器,这些教程有一些不推荐使用的方法我已经得到了它(我接受这可能是错误的,因为还不够远来测试它
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
class viewpager_adapter(fragmentManager: FragmentManager):FragmentPagerAdapter(fragmentManager,FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getItem(position: Int): Fragment {
return when(position){
0 -> WonGamesByDiff.newInstance()
1 -> WonGamesByDiff.newInstance()
else -> WonGamesByDiff.newInstance()
}
}
override fun getCount() = 2
}
到目前为止,这是我卡住的地方。我收到一个错误,提示需要使用不同类型的适配器,并且似乎无法在此处找到遇到相同问题的人
错误:类型不匹配。
必需的:
(RecyclerView.Adapter
val vpager: ViewPager2
vpager = findViewById(R.id.viewpager_fragments)
val adapterviewpager = viewpager_adapter(supportFragmentManager)
vpager.setAdapter(adapterviewpager);
我完全接受,如果之前的设置不正确,问题可能不是它告诉我的。
我最终想要实现的是能够滑动浏览片段,而不是我目前的方法是将它们堆叠在单个滚动视图中。
如果需要其他代码来评估这一点,请告知
编辑以下回复:
虽然我没有在技术上进行迁移(我已经设法按照不同的教程拼凑了 viewpager 和 viewpager2 的混合体),但我已按如下方式更改了我的适配器;
package com.example.sumitup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager2.adapter.FragmentStateAdapter
class ViewPagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
override fun getItemCount()=2
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> WonGamesByDiff.newInstance()
1 -> WonGamesByDiff.newInstance()
else -> WonGamesByDiff.newInstance()
}
}
}
在我的活动中将活动代码更改为
val vpager: ViewPager2
vpager = findViewById(R.id.viewpager_fragments)
val adapterviewpager = ViewPagerAdapter(FragmentActivity())
vpager.adapter = adapterviewpager;
虽然这不再在编辑器中(或在构建中)出现错误,但我现在在加载活动时遇到致命错误:
java.lang.IllegalStateException: FragmentManager 尚未连接到主机。
最终编辑
我修改了这个
val adapterviewpager = ViewPagerAdapter(FragmentActivity())
到这里:
val adapterViewPager = ViewPagerAdapter(this)
纠正了我的致命错误,现在允许滑动片段
【问题讨论】:
-
谁标记了我并且没有留下任何cmets?我遇到了问题,解释得很好,并在我解决问题的过程中包含了更新,这有什么问题?
标签: android android-fragments android-viewpager2