Попробуйте
ViewStub. В зависимости от того, какой файл пришёл с предыдущего экрана, будете инфлейтить разные макеты (для аудио/фото/видео) и работать с ними.
Можно даже выделить три разных кастомных виджета, реализающих один общий интерфейс MediaFileHandler. В этом интерфейсе будет метод handleFile(File). При попадании на экран с выводом медиа вы инфлейтите соответствующий layout, содержащий ваш кастомный виджет, и вызываете у виджета handleFile().