简体   繁体   English

根据ViewPager2的Position修改Layout

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

I want to make changes in my Layout that contains ViewPager2 according to the position of ViewPager2.我想根据 ViewPager2 的 position 更改包含 ViewPager2 的布局。 Example -> I want to make a Button Visible when the ViewPager2 has the last item or position. But I am Not able to do so, Any Help and Suggestions would be Very Helpful Thank You.示例 -> 我想在 ViewPager2 有最后一项或 position 时使按钮可见。但我无法这样做,任何帮助和建议都会非常有帮助谢谢。

My Adapter:我的适配器:

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)
}

You are using RecyclerView.ViewHolder instead of MyViewHolder in your adapter.您在适配器中使用 RecyclerView.ViewHolder 而不是 MyViewHolder。 Replace RecyclerView.ViewHolder with MyViewHolder and it should work properly then.将 RecyclerView.ViewHolder 替换为 MyViewHolder,然后它应该可以正常工作。

Use registerOnPageChangeCallback in your ViewPager2 .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