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
}