Прерывание щелчков от подпредставления в Android

Мое приложение имеет пользовательское представление, которое содержит другие пользовательские представления другого типа. Подпредставления имеют своих собственных слушателей щелчка (который я не могу изменить, как они находятся в сторонних библиотеках). Как я могу прервать щелчок пользователя по уровню моего представления, чтобы сделать некоторую обработку и затем передать щелчок на надлежащее подпредставление?

8
задан Justin 5 January 2010 в 01:17
поделиться

2 ответа

Я только что создал электронную таблицу, в которой используется Bazaar, с ручной сдачей на хранение/выгрузкой через TortiveBZR. Учитывая, что тема помогла мне с частью сохранения, я хотел разместить свое решение здесь.

Решение для меня заключалось в создании электронной таблицы, которая экспортирует все модули при сохранении, а также удаляет и повторно импортирует модули при открытии. Да, это может быть потенциально опасно для преобразования существующих электронных таблиц.

Это позволяет мне редактировать макросы в модулях с помощью Emacs (да, emacs) или самостоятельно в Excel и фиксировать репозитарий BZR после серьезных изменений. Поскольку все модули являются текстовыми файлами, стандартные команды diff-style в BZR работают для моих источников, кроме самого файла Excel.

Я установил каталог для моего репозитория BZR, X :\Data\MySheet. В репо представлены MySheet.xls и один файл .vba для каждого из моих модулей (т.е. Module1Macros). В своей электронной таблице я добавил один модуль, который освобожден от цикла экспорта/импорта под названием «VersionControl». Каждый экспортируемый и повторно импортируемый модуль должен заканчиваться на «Macros».

Содержимое модуля «VersionControl»:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count
        If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
            sName$ = .VBComponents(i%).CodeModule.Name
            .VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count

        ModuleName = .VBComponents(i%).CodeModule.Name

        If ModuleName <> "VersionControl" Then
            If Right(ModuleName, 6) = "Macros" Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

Далее для запуска этих макросов необходимо настроить крючки событий для открытия/сохранения. В средстве просмотра кода щелкните правой кнопкой мыши «ThisWorkbook» и выберите «View Code». Для перехода из ракурса «(Общие)» в ракурс «Рабочая книга» может потребоваться переместить поле выбора в верхней части окна кода.

Содержание представления «Рабочая книга»:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveCodeModules

End Sub

Я перейду к этому процессу в течение следующих нескольких недель и опубликую, если у меня возникнут проблемы.

Спасибо, что поделились кодом VBComponent!

-121--660000-

Это действительно сводится к вопросу о том, как реализована библиотека STL, а не к проблеме со спецификацией языка. В языковой спецификации нет ничего, что запрещало бы это работать, и нет ничего, что требовало бы, чтобы это работало.

Если конструктор stl:: vector был записан для попытки неявного преобразования с помощью оператора назначения, то это приведет к ошибке. Более вероятно, что реализация Microsoft STL использует оптимизацию возвращаемого значения во время инициализации посредством вызова конструктора, и в этом случае этот код будет работать нормально.

Важно отметить, что это работает только потому, что конструктор stl:: vector является шаблонным, и единственное требование состоит в том, что он является input_iterator или более точно поддерживает все необходимые функциональные возможности итератора ввода.

Я также хотел бы отметить, что это яркий пример того, почему часто трудно писать кроссплатформенный код. Иногда возникают проблемы, при которых ни один из компиляторов не обязательно отклоняется от языкового стандарта, но код все равно не переносится.

-121--4013212-

Джастин, вы можете играть с dispatchTouchEvent () или onInterceptttTouchEvent ().

7
ответ дан 5 December 2019 в 23:15
поделиться

Я не совсем уверен в этом, но на Java я бы определил различные объекты субпросмотра в моем основном представлении и просто отправил бы их в функцию рисования/отрисовки. Таким образом, у меня был бы только ОДИН клик-прослушиватель, который все равно был бы в окне просмотра.

Можете ли вы сделать что-то подобное в Android?

.
-2
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: