Измените RecyclerView MvvmCross на widget.RecyclerView - PullRequest
0 голосов
/ 22 мая 2019

У меня есть модуль моего приложения, в котором вы можете отвечать на различные вопросы, такие как текст, логическое значение, множественный выбор и т. Д. *

Он построен с помощью MvvmCross RecyclerView с его адаптером и viewHolders. В общем, у меня есть 14 viewTypes. Каждый из них является типом макета.

Но просмотр утилиты mvvmcross вызывает у меня проблемы с производительностью, когда я выполняю прокрутку, с задержкой около одной секунды.

Мой вопрос: будет некоторое различие между recyclerView android.support.v7.widget.RecyclerView и mvvmcross, кроме способа сделать привязку, чтобы изменить ее и проверить, немного ли она улучшает производительность ?

К сожалению, я не могу поделиться большим количеством кода из-за политики компании.

Спасибо за вашу помощь.

Мой вид переработчика

<MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView
 android:clipToPadding="false"
 android:id="@+id/form_rv_formitems"
 android:focusable="false"
 android:layout_height="match_parent"
 android:layout_width="match_parent"
 android:scrollbars="vertical" />

Активность

protected override void OnViewModelSet()
{
  _recyclerViewAdapter = new RecyclerViewAdapter((IMvxAndroidBindingContext)BindingContext);
  _recyclerView = FindViewById<MvxRecyclerView>(Resource.Id.form_rv_formitems);
  _recyclerView.HasFixedSize = true;
  _recyclerView.Adapter = _recyclerViewAdapter;   
 _recyclerView.ViewTreeObserver.AddOnScrollChangedListener(this);
        }

Мой адаптер

public class RecyclerViewAdapter : MvxRecyclerAdapter
    {
        public RecyclerViewAdapter(IMvxAndroidBindingContext bindingContext)
            : base(bindingContext) => HasStableIds = true;

        public override int GetItemViewType(int position) => 
            ViewTypeFactory.GetViewTypeBy((BindableFormItem)GetItem(position));

        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            var bc = new MvxAndroidBindingContext(parent.Context, BindingContext.LayoutInflaterHolder);
            var vh = FormItemViewHolderFactory.GetByViewType(viewType, parent, bc);
            return vh;
        }

        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            base.OnBindViewHolder(holder, position);
            var vh = holder as FormItemViewHolder;
            vh.Bind();
        }

        public override long GetItemId(int position)
        {
            var fi = (BindableFormItem)GetItem(position);
            return fi.Id;
        }
    }
...