Как группировать в MvvmCross RecyclerView? - PullRequest
0 голосов
/ 10 сентября 2018

Как группировать в MvvmCross RecyclerView? MvvmCross.Droid.Support.V7.RecyclerView 6.1.2

 <MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView               
                android:id="@+id/recyclerView"
                android:scrollbars="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:MvxItemTemplate="@layout/appointment_feed_item" 
                app:MvxBind="ItemsSource Items" />

1 Ответ

0 голосов
/ 10 сентября 2018

MvvmCorss включает в себя аккуратный механизм для этого, начиная с версии 4.1.5. Он называется TemplateSelector и определяется в интерфейсе IMvxTemplateSelector. Цель этого интерфейса - сопоставить ваш элемент с идентификатором макета на основе правила, которое вы можете определить.

Так что это не совсем «группа по», но вы можете использовать один макет для заголовка группы и другой для каждого элемента группы.

public class TypeTemplateSelector : IMvxTemplateSelector
{
    private readonly Dictionary<Type, int> _typeMapping;

    public TypeTemplateSelector()
    {
        _typeMapping = new Dictionary<Type, int>
        {
            {typeof(HeaderGroupViewModel), Resource.Layout.header_group},
            {typeof(GroupItemViewModel), Resource.Layout.group_item}
        };
    }

    public int GetItemViewType(object forItemObject)
    {
        return _typeMapping[forItemObject.GetType()];
    }

    public int GetItemLayoutId(int fromViewType)
    {
        return fromViewType;
    }
}

И в axml вы устанавливаете его, используя полное имя класса селектора, за которым следует имя сборки:

<MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView               
            android:id="@+id/recyclerView"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:MvxItemTemplate="@layout/appointment_feed_item"
            app:MvxTemplateSelector="RecyclerViewDifferentTemplates.Droid.TypeTemplateSelector,RecyclerViewDifferentTemplates.Droid"
            app:MvxBind="ItemsSource Items" />

Источник и дополнительная информация: RecyclerView TemplateSelector в MvvmCross

Е.И.В.

...