Из кода, который вы разместили, я бы сказал, что с вами все будет в порядке. Однако наличие интерфейса, как вы упомянули, может помочь сделать вещи более понятными, поскольку вместо этого вы передадите это своему адаптеру, не раскрывая всю модель представления.
Глядя на этот бит
.setOnClickListener(view -> viewModel.setMainImage(viewModel.getImageUrl(position)));
заставляет задуматься, не можете ли вы просто передать, сообщите модели представления, что элемент был нажат, поскольку вы снова используете модель представления, чтобы выяснить, какой URL-адрес изображения должен передаваться в качестве аргумента, на основе позиции .
Итак, если вы используете интерфейс, у вас будет что-то вроде setOnClickListener(view -> itemClickListener.itemClicked(position)
. Ваша модель представления будет реализовывать этот интерфейс.