kotlin 根据RecyclerView中单击的项目,打开ViewPager,并将PagerAdapter放在特定位置

zbdgwd5y  于 2023-03-09  发布在  Kotlin
关注(0)|答案(1)|浏览(191)

我有一个聊天应用程序与Firestore,我把发送的图像消息在一个ViewPager适配器。所以,我成功地查看了发送者和接收者之间的所有图像消息。但是,问题是,当点击聊天室中的任何图像,ViewPager开始在相同的位置[0]。
我想让适配器监听我对一个项目的点击并转到目标位置。这里是我的ViewPager适配器和一些代码示例。

class ImgViewPagerAdapter(val context: Context, private val imageList: ArrayList<ImageViewerData>)
    : PagerAdapter(){

    override fun getCount(): Int {
        return imageList.size
    }

    override fun isViewFromObject(view: View, `object`: Any): Boolean {
        return view === `object` as RelativeLayout
    }

    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        val mLayoutInflater =
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

        val itemView: View = mLayoutInflater.inflate(R.layout.img_viewer_item, container, false)

        val imageView: ImageView = itemView.findViewById<View>(R.id.idIVImage) as ImageView

        val currentImg = imageList[position]
        Glide.with(context).load(currentImg.img).into(imageView)

        Objects.requireNonNull(container).addView(itemView)

        return itemView
    }

    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        container.removeView(`object` as RelativeLayout)
    }

}
firestore.collection("Chats").document(senderRoom).collection("messages")
            .whereEqualTo("type", "photo").addSnapshotListener { value, _ ->
                if (!value?.isEmpty!!) {
                    for (document in value.documents) {
                        val img = document.data?.get("message").toString()
                        val senderName = document.data?.get("senderName").toString()
                        imageList.add(ImageViewerData("", img, "", senderName))
                        viewPagerAdapter.notifyDataSetChanged()
                    }
                }
            }

我尝试在Firestore中为插入的图像放置一个增量无限方法,但它总是放置相同的id值(0)。如果可能或在Firestore中可用,如何为每个从0开始的图像放置一个整数值。
谢谢你...

ktca8awb

ktca8awb1#

您可以通过调用视图页导航的setCurrentItem来完成此操作:

viewPager.setCurrentItem(index);

快速提示:你最好使用ViewPager2,它会对你来说容易得多。

相关问题