Android [已解决]如何在水平回收视图中获得位置?

Android [已解决]如何在水平回收视图中获得位置?,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我是科特林的学生。我正在使用RecyclerViewhorizontal做一个教程布局,但我遇到了一个问题,已经尝试在堆栈上找到一些答案,但没有帮助。 所以我的RecyclerView基本上有3项,我想做的是: -当我水平传递第一个和第二个项目时,我的活动将显示2个文本视图可见,1个按钮隐藏, -但是在RecyclerView的第三项中,我需要在活动上隐藏2个文本视图,并显示一个按钮。我知道我需要从RecyclerView获取职位,但我不知道如何获取 我尝试在BindViewHolder内使用i

我是科特林的学生。我正在使用
RecyclerView
horizontal做一个教程布局,但我遇到了一个问题,已经尝试在堆栈上找到一些答案,但没有帮助。 所以我的
RecyclerView
基本上有3项,我想做的是: -当我水平传递第一个和第二个项目时,我的活动将显示2个
文本视图
可见,1个
按钮
隐藏, -但是在
RecyclerView
的第三项中,我需要在
活动
上隐藏2个
文本视图
,并显示一个
按钮
。我知道我需要从
RecyclerView
获取职位,但我不知道如何获取

我尝试在BindViewHolder内使用
if(adapterposition==0 | | adapterposition==1)else
,但效果不太好,感谢您的帮助

解决了!找到了CrollStateChanged上的解决方案实现方法,希望对大家有所帮助

我的xml

        <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/listtutorial"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_marginTop="50dp" />

    <TextView
        android:id="@+id/skip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/listtutorial"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="40dp"
        android:fontFamily="@font/robotmedium"
        android:text="Skip" />

    <TextView
        android:id="@+id/next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/listtutorial"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="40dp"
        android:layout_marginRight="24dp"
        android:fontFamily="@font/robotmedium"
        android:text="Next" />

        <Button
            android:id="@+id/btngetstarted"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_below="@id/listtutorial"
            android:layout_marginTop="40dp"
            android:layout_marginHorizontal="32dp"
            android:text="Get Started"
            android:textAllCaps="false"
            android:visibility="gone"
            android:backgroundTint="@color/orange"
            android:fontFamily="@font/robotmedium"
            android:textColor="@color/white"/>

您在
onBindViewHolder
var s : ArrayList<TutorialResponse> = arrayListOf()
        s.add(TutorialResponse(R.drawable.add_to_cart_vkjp,"Choose Your Desire Product","Contrary to popular belief, Lorem Ipsum is not simply random text"))
        s.add(TutorialResponse(R.drawable.successful_purchase,"Complete your shopping","Contrary to popular belief, Lorem Ipsum is not simply random text"))
        s.add(TutorialResponse(R.drawable.on_the_way_ldaq,"Get product at your door","Contrary to popular belief, Lorem Ipsum is not simply random text"))

        listtutorial.adapter = TutorialAdapter(this,s)
        listtutorial.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)

        val snapHelper = PagerSnapHelper()
        snapHelper.attachToRecyclerView(listtutorial)

        listtutorial.addOnScrollListener(object : RecyclerView.OnScrollListener() 
        {
            override fun onScrollStateChanged(recyclerView: RecyclerView, 
            newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                if(newState == RecyclerView.SCROLL_STATE_IDLE){
                    position = getCurrentItem()
                    if(position == 2){
                        setUI()
                    }else{
                        setUI2()
                    }
                }
            }
        })
    }

    fun getCurrentItem(): Int {
        return (listtutorial.getLayoutManager() as 
                LinearLayoutManager).findFirstVisibleItemPosition()
    }

    fun setUI(){
        skip.visibility = View.GONE
        next.visibility = View.GONE
        btngetstarted.visibility = View.VISIBLE
    }

    fun setUI2(){
        skip.visibility = View.VISIBLE
        next.visibility = View.VISIBLE
        btngetstarted.visibility = View.GONE
    }

class TutorialAdapter (var context: Context, var list: List<TutorialResponse>) : RecyclerView.Adapter<TutorialAdapter.ViewTutorial>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewTutorial {
        val view = LayoutInflater.from(context).inflate(R.layout.item_tutorial, parent, false)

        return ViewTutorial(view)
    }

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

    override fun onBindViewHolder(holder: ViewTutorial, position: Int) {
        holder.bind(context, list[position])
    }

    class ViewTutorial (itemView : View) : RecyclerView.ViewHolder(itemView){
        fun bind (context: Context, item : TutorialResponse){
                var title = itemView.findViewById<TextView>(R.id.title)
                var subtitle = itemView.findViewById<TextView>(R.id.subtitle)
                var image = itemView.findViewById<ImageView>(R.id.image)

                title.text = item.title
                subtitle.text = item.subtitle
                Glide.with(context).load(item.image).into(image)

        }
    }
        listtutorial.addOnScrollListener(object : RecyclerView.OnScrollListener() 
        {
            override fun onScrollStateChanged(recyclerView: RecyclerView, 
            newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                if(newState == RecyclerView.SCROLL_STATE_IDLE){
                    position = getCurrentItem()
                    if(position == 2){
                        setUI()
                    }else{
                        setUI2()
                    }
                }
            }
        })
    }

    fun getCurrentItem(): Int {
        return (listtutorial.getLayoutManager() as 
                LinearLayoutManager).findFirstVisibleItemPosition()
    }

    fun setUI(){
        skip.visibility = View.GONE
        next.visibility = View.GONE
        btngetstarted.visibility = View.VISIBLE
    }

    fun setUI2(){
        skip.visibility = View.VISIBLE
        next.visibility = View.VISIBLE
        btngetstarted.visibility = View.GONE
    }