Как я могу прокручивать ViewPager2 (RecyclerView.Adapter) в другом ViewPager2 (FragmentStateAdapter)? - PullRequest
0 голосов
/ 11 июля 2020

enter image description here

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 по горизонтали!

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