Android-представитель с разделенным представлением/регионом с MvvmCross

Моя цель — создать окно пользовательского интерфейса Android, в котором отображаются три области: навигационная, основная и всплывающая. Навигация и основная область будут функционировать как разделенное представление. Всплывающая область будет располагаться по центру экрана и перекрывать две другие области; он также будет виден только часть времени. В идеале я бы хотел, чтобы в этих регионах размещались фрагменты, которые динамически изменяются для отображения различных макетов и моделей просмотра в зависимости от взаимодействия с пользователем. И все это должно быть выполнено без нарушения привязок MvvmCross.

У меня есть кое-что, что работает, но кажется, что это немного взломано. Текущая реализация наиболее близко соответствует ресурсу 1 ниже. В каждом регионе есть словарь. Все фрагменты регистрируются в словаре на основе их целевого региона. Это делается из активности. Активность также заботится о том, чтобы раздуть каждый макет и связать его с правильной моделью представления. Я хотел бы изменить это, чтобы MvvmCross мог выполнять больше работы.

Можно ли создать собственный презентатор в Android, который представляет собой смесь динамического макета фрагмента из ресурса 2 и пользовательского презентатора iOS, показанного в ресурсе 3? Просто чтобы уточнить, я хочу конкретно определить, где будет отображаться каждый регион с помощью макета. Затем я хочу динамически заполнять содержимое каждого региона различными макетами и связанными с ними моделями просмотра во время выполнения.


Ресурс 1: образец фрагмента MvvmCross v3

https://github.com/slodge/MvvmCross-Tutorials/tree/master/Fragments

См.: «FragmentSample.UI.Droid/Views/TitlesView.cs» и «FragmentSample.UI.Droid/Setup.cs».

Ресурс 2: N = 26 — андроиды… на Фрагмент-Рок.

http://www.youtube.com/watch?feature=player_embedded&v=uQT3_WXQQr0

Создание динамического макета фрагмента объясняется в 26:25 — 32:10

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <FrameLayout
    android:id="@+id/subframe1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <FrameLayout
    android:id="@+id/dubframe1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

(Кроме того, что это чрезвычайно полезное видео, из всех видео N+1, которые мне довелось посмотреть, у этого самое лучшее вступление!)

Ресурс 3: N = 24 – раздельный просмотр

http://www.youtube.com/watch?feature=player_embedded&v=PpeysFIINcY

iOS SplitPresenter создан в 11:25 — 15:05

public class SplitViewController : UISplitViewController
    {
        public SplitViewController()
        {
            this.ViewControllers = new UIViewController[]
                {
                    new UIViewController(), 
                    new UIViewController(), 
                };
        }

        public void SetLeft(UIViewController left)
        {
            this.ViewControllers = new UIViewController[]
                {
                    left,
                    this.ViewControllers[1]
                };
        }

        public void SetRight(UIViewController right)
        {
            this.ViewControllers = new UIViewController[]
                {
                    this.ViewControllers[0],
                    right,
                };
        }
    }

person Josh    schedule 06.08.2013    source источник
comment
enginecore.blogspot.ca/2013 /06/ помочь?   -  person Stuart    schedule 06.08.2013
comment
Стюарт, сообщение в блоге помогло понять это. Я ссылался на него несколько раз при создании примера проекта. Спасибо.   -  person Josh    schedule 09.08.2013


Ответы (1)


Я создал небольшой пример проекта на GitHub, демонстрирующий создание нескольких регионов.

Изображение примера проекта на GitHub

Здесь показаны три области: Навигация, Основная и Всплывающее окно. Расположение, размер и форма каждой области определяются в одном файле макета. Контент определяется с отдельными файлами макета и моделями просмотра для каждого региона и динамически изменяется во время выполнения. Привязки MvvmCross по-прежнему работают с каждой отдельной моделью представления.


ИЗМЕНИТЬ

Я добавил более надежный пример решения на github. Это позволяет открывать ViewModel стандартным способом. MultiRegionPresenter обрабатывает сопоставление представления с правильным регионом, просматривая тег в представлении. Представления теперь помечаются предполагаемым регионом следующим образом: [Region(Resource.Id.MainRegion)].

Новый пример проекта находится здесь: Пример MultiRegionPresenter

person Josh    schedule 08.08.2013