Возможно. Тогда как мне дать понять фрагменту, что нужно перейти на другой фрагмент после загрузки данных? Ну и тут проблема не в лиссенере, а в том как передать любые данные во ViewModel.
дать прямой и однозначный ответ на этот вопрос нельзя. всё дело в абстракциях.
в шаблонах проектирования MVC, MVP, MVVM гланым является - разделение абстракций Model и View. Предпосылка к такому расслоению - идея о том, что Model может измениять независимо от VIew, а одной Model может соответсвовать несколько View и на одном View может быть представленно несколько Model.
Нужно определить "нужно перейти" это область ответсвенности View или Model?
Например, пользователь смотри на таблицу данных и теперь хочет посмотреть эти данные в виде круговой диаграммы - пользовать просто хочет сменить вид представления данных - это область ответсвенности View, другие слои абстраций об этом ничего не должны знать. В реализации это может быть как простое переключение фрагментов без пробрасывания вызовов через ViewModel (это было бы ошибкой дизайна кода).
Другой пример. ПОльзовать вводит в форму данные и жмет "Submit", данные отправляются на сервер и проходят там логическую валидацию (например мы бронируем места в кино и нужно на сервере убедиться что места ещё не заняты кем-то другим). По результатам валидации оказывается, что система не может принять запрос пользователя - пользователю нужно показать "сообщение" или какой-то интерфейс для изменения выбора. Потребность "показать фрагмет" возникает в слое абстракции Model. Как в данном случает реализовать этот "показ"? Дать View возможность подписаться на событие "ошибка" и показать нужный интерфейс пользователю при наступлении этого события. В андроиде из "стандартных" способов несколько это и Rx, и какой-нибудь EventBus. Сложность этого случае в правильном разделении на VIewModel's и организация сообщений/событий между ViewModel и View.