У меня есть модуль моего приложения, в котором вы можете отвечать на различные вопросы, такие как текст, логическое значение, множественный выбор и т. Д. *
Он построен с помощью 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;
}
}