繁体   English   中英

根据ViewPager2的Position修改Layout

[英]Making Changes in Layout according to the Position of ViewPager2

我想根据 ViewPager2 的 position 更改包含 ViewPager2 的布局。 示例 -> 我想在 ViewPager2 有最后一项或 position 时使按钮可见。但我无法这样做,任何帮助和建议都会非常有帮助谢谢。

我的适配器:

open class ImagesliderAdapter(private val context: Context, private val list: ArrayList<HomePageSlideEntity>, private val viewPager2: ViewPager2): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_imageslider, parent, false))
    }


    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val model = list[position]
        if(position==list.size-1) {
            viewPager2.post(runnable)
        }
        if(holder is MyViewHolder) {
            holder.itemView.findViewById<ImageView>(R.id.ivimageslider).setImageURI(Uri.parse(model.image))
        }
    }

    override fun getItemCount(): Int {
        return list.size
    }

    private val runnable = Runnable {
        list.addAll(list)
        notifyDataSetChanged()
    }

    private class MyViewHolder(view: View): RecyclerView.ViewHolder(view)
}

您在适配器中使用 RecyclerView.ViewHolder 而不是 MyViewHolder。 将 RecyclerView.ViewHolder 替换为 MyViewHolder,然后它应该可以正常工作。

ViewPager2中使用registerOnPageChangeCallback

     binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {

                override fun onPageScrolled(
                    position: Int,
                    positionOffset: Float,
                    positionOffsetPixels: Int
                ) {
                    super.onPageScrolled(position, positionOffset, positionOffsetPixels)
                    Log.d("Page", "onPageScrolled: $position")
                }

                override fun onPageSelected(position: Int) {
                    super.onPageSelected(position)

                    Log.d("Page", "onPageSelected: $position")

                    // use position and do what ever you want
                    //for 1st page
                    if (position <= 0) {
                        btn.visibility = View.GONE
                    } else {
                        btn.visibility = View.VISIBLE
                    }
                    //for last page
                    if (position + 1 >= args.content.items.size) {
                        btn.visibility = View.GONE
                    } else {
                        btn.visibility = View.VISIBLE
                    }


                }

                override fun onPageScrollStateChanged(state: Int) {
                    super.onPageScrollStateChanged(state)
                }

            })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM