您可以只使用具有两种不同视图类型的RecyclerView,第一种是您的静态视图。
我假设您的数据集由通用 Item 对象填充,请将此值替换为您的数据集对象类型。
我认为问题与将回收器视图嵌套到另一个视图中滚动方法无法正常工作有关。
我将在 Kotlin 中发布我的代码,如果您需要它的 Java 版本,请告诉我。
这是要使用的回收器视图适配器:
// Global variables
private var itemList = mutableListOf<Item>()
enum class ViewType {
STATIC_VIEW,
ITEM_VIEW
}
inner class RecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int = itemList.size + 1
override fun getItemViewType(position: Int): Int {
if (position == 0) {
return ViewType.STATIC_VIEW.ordinal
}
return RowMenuType.ITEM_VIEW.ordinal
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (getItemViewType(position) == RowMenuType.STATIC_VIEW.ordinal) {
(holder as ViewHolderStaticView).bind()
} else {
(holder as ViewHolderItemList).bind(itemList[position - 1])
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == RowMenuType.STATIC_VIEW.ordinal) {
val view = layoutInflater.inflate(<your-static-view-layout>, parent, false)
return ViewHolderStaticView(view)
}
val view = layoutInflater.inflate(<your-item-list-layout>, parent, false)
return ViewHolderItemList(view)
}
inner class ViewHolderStaticView(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind() = with(itemView) {
// Setup your static view layout
}
}
inner class ViewHolderItemList(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(item: Item) = with(itemView) {
// Setup your list items
}
}
设置您的回收站视图调用:
parent_recycler_view.layoutManager = LinearLayoutManager(this)
parent_recycler_view.adapter = RecyclerViewAdapter()
要添加新元素,您需要调用:
itemList.add(Item())
parent_recycler_view.adapter.notifyDataSetChanged()
你应该可以通过调用滚动到回收器视图的底部:
parent_recycler_view.smoothScrollToPosition(itemList.size)