Android 具有复杂项的RecyclerView滚动问题

Android 具有复杂项的RecyclerView滚动问题,android,performance,android-layout,android-recyclerview,Android,Performance,Android Layout,Android Recyclerview,我面临着复杂项目的滞后滚动问题。 我试图建立一个像下图这样的视图。 我试着#设置hasstableId#hasFixedSize#PreCacheLinearLayout#设置ItemViewCacheSize。。。 还有很多路要走,但仍然落后。我知道可能是我的项目太复杂了,但这是要求:( 如果您有一些解决此问题的想法,请帮助我!非常感谢大家使用此方法..rv.getRecycledViewPool().setMaxRecycledViews(0,0);这可能会有帮助..请参阅链接以获取方法说

我面临着复杂项目的滞后滚动问题。 我试图建立一个像下图这样的视图。

我试着#设置hasstableId#hasFixedSize#PreCacheLinearLayout#设置ItemViewCacheSize。。。 还有很多路要走,但仍然落后。我知道可能是我的项目太复杂了,但这是要求:(
如果您有一些解决此问题的想法,请帮助我!非常感谢大家使用此方法..rv.getRecycledViewPool().setMaxRecycledViews(0,0);这可能会有帮助..请参阅链接以获取方法说明..

谢谢!这是一个改进
            android:id="@+id/rvHome"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorGrayLight"
            android:clipToPadding="false"
            app:items="@{viewModel.listData}"
            android:nestedScrollingEnabled="true"
            android:orientation="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
        @BindingAdapter("items")
        fun<T> setItems(view: RecyclerView, model: ObservableArrayList<T>?) {
            model?.let {
                if(view.adapter is BaseRecyclerViewAdapter<*>){
                    (view.adapter as BaseRecyclerViewAdapter<T>).listItem  = it;
                }
            }
        }
abstract class BaseRecyclerViewAdapter<T>() :
    RecyclerView.Adapter<BindingViewHolder>() {

    var listItem: ObservableArrayList<T>? = null
        set(value) {
            value?.let {
                onSettingListItem(it);
            }
            field = value
            value?.let {
                it.addOnListChangedCallback(onListChangedCallback)
            }
            notifyDataSetChanged()
        }

    var presenter: Presenter? = null
    var decorator: Decorator? = null

    fun add(t:T){
        listItem?.let {
            it.add(t)
            notifyDataSetChanged()
        }
    }
    fun addAll(items:Collection<T>){
        Log.d("TAG","data $items")
        Log.d("TAG","data $listItem")
        listItem?.let {
            it.addAll(items)
            notifyDataSetChanged()
        }
    }
    open fun onSettingListItem(list: ObservableArrayList<T>) {

    }

    val onListChangedCallback = object : ObservableList.OnListChangedCallback<ObservableList<T>>() {
        override fun onChanged(sender: ObservableList<T>) {
            notifyDataSetChanged()
        }

        override fun onItemRangeChanged(
            sender: ObservableList<T>,
            positionStart: Int,
            itemCount: Int
        ) {
            notifyItemRangeChanged(positionStart, itemCount)
        }

        override fun onItemRangeInserted(
            sender: ObservableList<T>,
            positionStart: Int,
            itemCount: Int
        ) {
            notifyItemRangeInserted(positionStart, itemCount)
        }

        override fun onItemRangeMoved(
            sender: ObservableList<T>,
            fromPosition: Int,
            toPosition: Int,
            itemCount: Int
        ) {
            notifyItemMoved(fromPosition, toPosition)
        }

        override fun onItemRangeRemoved(
            sender: ObservableList<T>,
            positionStart: Int,
            itemCount: Int
        ) {
            notifyItemRangeRemoved(positionStart, itemCount)
        }
    }



    override fun onBindViewHolder(holder: BindingViewHolder, position: Int) {
        listItem?.let {
            val item = it[position]
            // set item variable
            holder.binding.setVariable(BR.viewModel, item)
        }
        holder.binding.setVariable(BR.presenter, presenter)
//        holder.binding.setVariable(BR.currentPos, position)
        holder.binding.executePendingBindings()
        if (decorator != null) {
            decorator!!.decorate(holder, position, getItemViewType(position))
        }
    }

    override fun getItemCount(): Int {
        listItem?.let {
            return it.size
        }
        return 0;
    }

    interface Presenter {
        fun onItemClick(view: View, item: Any, position: Int)
    }

    interface Decorator {
        fun decorate(holder: BindingViewHolder, position: Int, viewType: Int)
    }


}
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view_trending_trip"
            style="@style/RecyclerHorizontalStyle"
            android:nestedScrollingEnabled="false"
            app:items="@{viewModel.data}"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            />