Hi. I made Tab by using TabLayout
and ViewPager2
(FragmentStateAdapter).
Also, I made another ViewPager2 in Tab B
like my image.
This pager should act like recyclerview (But like viewpager also..!)..
But it doesnt'.
When I scroll from left to right or right to left,
only Tab changes.. not change the datas!!
I used requestDisallowInterceptTouchEvent()
but it doesn' t work :(
Belows are my code samples.
MainFragmentAdapter.kt
class MainFragmentAdapter(fragmentManager: FragmentManager, lifeCycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifeCycle) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment {
return when(position) {
0 -> AFragment()
1 -> BFragment()
else -> CFragment()
}
}
}
FragmentBAdapter.kt
class PagerViewHolder(view: View): RecyclerView.ViewHolder(view) {
val title = view.book_title_text
val author = view.book_author_text
val published = view.book_published_text
}
class FragmentBAdapter(val list: MutableList<Book>): RecyclerView.Adapter<PagerViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PagerViewHolder {
return PagerViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_view_pager2, parent, false))
}
override fun getItemCount(): Int = list.size
override fun onBindViewHolder(holder: PagerViewHolder, position: Int) {
val item = list[position]
holder.title.text = item.title
holder.author.text = item.author
holder.published.text = item.published
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
val tabLayoutTextArray = arrayOf("Tab A", "Tab B", "Tab C")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// supportFragmentManager.beginTransaction().replace(R.id.fragment, fragmentSelected).commit()
viewPager2.adapter = MainFragmentAdapter(supportFragmentManager, lifecycle)
TabLayoutMediator(tabLayout, viewPager2) { tab: TabLayout.Tab, position: Int ->
tab.text = tabLayoutTextArray[position]
}.attach()
}
}
BFragment.kt
class BFragment: Fragment() {
var bookList = mutableListOf<Book>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_b, container, false)
bookList = BookDao(this.requireContext()).selectAll()
view.recyclerViewPager2.adapter = FragmentBAdapter(bookList)
view.recyclerViewPager2.orientation = ViewPager2.ORIENTATION_HORIZONTAL
activity?.viewPager2?.requestDisallowInterceptTouchEvent(true)
return view
}
}
Итак, я хочу прокрутить вложенный Viewpager2 по горизонтали!