Recycler View no se desplaza suavemente

Implementé el siguiente RecyclerViewAdapter con LinearLayoutManager

 class WaterSummaryListAdapter(private var dataList: List<WaterSummaryListItem>): RecyclerView.Adapter<RecyclerView.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val v = LayoutInflater.from(parent.context) .inflate(R.layout.list_row_water_summary, parent, false) return ItemViewHolder(v) } override fun getItemCount(): Int = dataList.size override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) { val dataItem = dataList[position] if (holder is ItemViewHolder){ holder.update(dataItem) } } inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private var date = itemView.itemDateSummaryList private var value = itemView.waterValue fun update(item: WaterSummaryListItem){ this.date.text = item.date this.value.text = item.volume.toString() } } fun changeValueOf(itemNo: Int, value: Float){ dataList[itemNo].volume = value notifyDataSetChanged() } } 

pero cuando se trata de desplazarse, no se desplaza suavemente. Se detiene de repente. Incluso probé .setHasFixedSize(true) pero incluso eso no funciona.

 recyclerView = view.summaryListRecyclerView val manager = LinearLayoutManager(context) adapter = WaterSummaryListAdapter(mSummaryListItems) recyclerView.layoutManager = manager recyclerView.adapter = adapter recyclerView.setHasFixedSize(true) 

Arriba, cómo implementé el adaptador a la vista de reciclador.

Escribir código de peso ligero en el cuerpo del método holder.update(dataItem)

Elimine la condición if en onBindViewHolder y llame al método de actualización directamente

if (el titular es ItemViewHolder) {}

 holder.update(dataItem) 

Debe configurar su layout como se indica a continuación

 recyclerView.layoutManager = LinearLayoutManager(activity, LinearLayout.VERTICAL, false) recyclerView.adapter = MyAdapter(yourList) 

puedes usar SpeedyLinearLayoutManager

 SpeedyLinearLayoutManager linearLayoutManager = new SpeedyLinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); Adapter myAdapter = new Adapter(myContext); myRecyclerView.setLayoutManager(linearLayoutManager); myRecyclerView.setAdapter(myAdapter); public class SpeedyLinearLayoutManager extends LinearLayoutManager { private static final float MILLISECONDS_PER_INCH = 6f; //default is 25f // set the speed here public SpeedyLinearLayoutManager(Context context) { super(context); } public SpeedyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } public SpeedyLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override public boolean canScrollVertically() { //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll return CommonUtils.IsContactActivityScrollEnabled && super.canScrollVertically(); } @Override public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { final LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) { @Override public PointF computeScrollVectorForPosition(int targetPosition) { return SpeedyLinearLayoutManager.this.computeScrollVectorForPosition(targetPosition); } @Override protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { return MILLISECONDS_PER_INCH / displayMetrics.densityDpi; } }; linearSmoothScroller.setTargetPosition(position); startSmoothScroll(linearSmoothScroller); } } 

primero que nada necesitas cambiar tu primera línea,

 class WaterSummaryListAdapter(private var dataList: List<WaterSummaryListItem>): RecyclerView.Adapter<RecyclerView.ViewHolder>() 

con

 class WaterSummaryListAdapter(private var dataList: List<WaterSummaryListItem>): RecyclerView.Adapter< WaterSummaryListAdapter.ItemViewHolder>() 

ACTUALIZACIÓN: eliminó la sugerencia innecesaria gracias @ Viktor Yakunin

  • Cómo proteger el oyente de desplazamiento sin fin de un reciclador
  • Cómo implementar un reciclador de carga perezosa. Adaptador de vista como el reciclador de reino. Ver el adaptador usando kotlin.
  • DiffUtils y multi selección
  • La animation SwipeRefreshLayout del primer bash de actualización se ejecuta sin parar
  • Intentando crear un reciclador simple en Kotlin, pero el adaptador no se está aplicando correctamente
  • Llame a getMeasunetworkingWidth () o getWidth () para RecyclerView return 0 en data binding
  • java.lang.IllegalStateException: TextView no debe ser nulo (Android / Kotlin)
  • ¿Cómo agregar un oyente Onclick en un RecyclerView en Android Studio con Kotlin?
  • ¿Cómo agregar una image más como un button al final de mi RecyclerView en Android?
  • Android Recycler View Horizontal Desplácese hasta el último elemento y muestre el primer elemento
  • Cómo extender desde una InnerClass en kotlin