侧边栏壁纸
博主头像
ERP_LXKUN_JAK

自然法则,物竞天择,适者生存

  • 累计撰写 7 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论
标签搜索

安卓用RecyclerView实现横向滑动列表

ERP_LXKUN_JAK
2023-03-11 / 1,116 阅读 / 430 字
温馨提示:
本文最后更新于 2023-03-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

背景
通常我们遇到的是纵向滑动列表,但是也会有横向滑动列表.那横向的怎么做呢?

解决方案
其实很简单,绝大部分代码和纵向是一样的,只有一个设置不一样.

实现效果

关键代码
recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
完整代码
1). MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var adapter: RvAdapter

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    initRecyclerView()
    loadData()
}

private fun initRecyclerView() {
    recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
    adapter = RvAdapter()
    recyclerView.adapter = adapter
}

private fun loadData() {
    val data = ArrayList<String>(100)
    for (i in 0..99) {
        data.add("text-$i")
    }
    adapter.setData(data)
}

}
2). RvAdapter.kt

class RvAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var mDataList = mutableListOf()
private lateinit var mContext: Context
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val data = mDataList[position]
holder.itemView.textView.text = data
holder.itemView.setOnClickListener {
setOnItemClickListener(data)
}
}

fun setData(dataList: List<String>) {
    mDataList.clear()
    mDataList.addAll(dataList)
    notifyDataSetChanged()
}

override fun getItemCount(): Int = mDataList.size

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    mContext = parent.context
    val view = LayoutInflater.from(mContext).inflate(R.layout.item_rv, parent, false)
    return ViewHolder(view)
}

private fun setOnItemClickListener(data: String) {
    mContext.toast(data)
}

class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!)

}
3). 布局文件

activity_main.xml

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
item_rv.xml
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="100dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:gravity="center"
        android:text="text" />

    <View
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:background="@android:color/darker_gray" />

</LinearLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray" />