Могу ли я использовать два xml-макета для использования одного и того же зрителя с использованием синтетических расширений Kotlin?

У меня есть список, который имеет расширяемые строки. Когда я нажимаю на строку, я раздуваю другой макет xml, который очень похож ( item_view (слева) и item_view_expanded (справа)) и имеет почти все одинаковые представления, но некоторые подвыборы отображаются в разных размерах (например, изображение увеличивается), и в расширенном виде есть одна дополнительная кнопка («Сохранить фотографию»).

Свернутый вид Расширенный просмотр

После преобразования этого файла в kotlin и попытке доступа к представлениям с использованием синтетических расширений kotlin, я получаю ошибку « Overload Resolution Ambiguity . Это имеет смысл, потому что на самом деле есть два xml-файла, которые имеют одинаковые идентификаторы и оба импортированы в этот файл. Большинство сообщений stackoverflow, которые я вижу (например, этот ), разрешаются путем удаления одного из операторов импорта или изменения идентификаторов. Но я хочу, чтобы идентификаторы соответствовали, потому что я хочу иметь один общий ViewHolder, который может связывать оба этих разных представления. В конце концов, текстовые представления и изображения – это одно и то же содержимое, только в другом визуальном макете.

Я мог бы сделать это на Java с помощью butterknife, потому что я просто аннотирую кнопку, которая не существует в свернутом макете ( download ), как обнуляемая, и выполняет некоторые нулевые проверки в привязке. Мне интересно, как я могу иметь два xml-макета, которые используют одну и ту же привязку, поскольку почти все одинаково. Можно ли это сделать в kotlin с использованием синтетических расширений?

Вот код Java для моего ViewHolder

  public static class ItemViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tvName) TextView mNameTextView; @BindView(R.id.tvRelationship) TextView mRelationshipTextView; @BindView(R.id.tvLifespan) TextView mLifespanTextView; @BindView(R.id.topDivider) View mTopDividerView; @BindView(R.id.bottomDivider) View mBottomDividerView; @BindView(R.id.imageView) ImageView mImageView; @Nullable @BindView(R.id.savePhoto) TextView mSavePhoto; public ItemViewHolder(final View view) { super(view); ButterKnife.bind(this, view); } private void bindItem(final int position, final PathPerson pathPerson, final PathDetailAdapter pathDetailAdapter) { // item mNameTextView.setTag(position); PathUtilities.loadRoundedLeftCornersImageForGender(pathPerson, mImageView); mNameTextView.setText(pathPerson.getFullName()); itemView.setOnClickListener(v -> { pathPerson.toggleExpanded(); pathDetailAdapter.notifyItemChanged(position); }); if (mSavePhoto != null) { mSavePhoto.setOnClickListener(v -> { // TODO: 9/7/17 download original Toast.makeText(itemView.getContext(), R.string.downloading, Toast.LENGTH_SHORT).show(); }); } PathUtilities.setLifespan(pathPerson, mLifespanTextView); PathUtilities.setRelationshipTextAndColorForGender(pathPerson, mRelationshipTextView); if (position == 1) { mTopDividerView.setVisibility(View.VISIBLE); mBottomDividerView.setVisibility(View.VISIBLE); } else if (position == pathDetailAdapter.mPathList.size() - 1) { mTopDividerView.setVisibility(View.GONE); mBottomDividerView.setVisibility(View.GONE); } else { mTopDividerView.setVisibility(View.GONE); mBottomDividerView.setVisibility(View.VISIBLE); } } } 

Оказывается, проблема устраняется путем удаления одного из операторов импорта. В моем случае мне нужно было сохранить ту, у которой была дополнительная кнопка загрузки (супер-набор из двух)

Intereting Posts
Ошибка: ошибка преобразования байт-кода в dex: Причина: com.android.dex.DexException: несколько файлов dex определяют Lorg / jetbrains / anko / collections / CollectionsKt; Kotlin возвращает тот же объект из метода Factory Отключить инкрементную сборку для kapt Наследование дженериков Котлина – несоответствие типов Kotlin: Java Util Date to String для привязки данных Ошибка базы данных комнаты с классом данных Kotlin Spring Data JPA / Hibernate "Невозможно найти атрибут с заданным именем" Котлин «Смарт-литье невозможно, потому что к этому моменту собственность могла быть изменена» почему я не могу использовать lambda для интерфейса в kotlin? Неразрешенная ссылка для Кинжала 2 в Котлине Поиск с помощью RxJava не работает Данные фильтра для FirebaseRecyclerAdapter Интеллектуальная переменная литья в обходном пути lambda kotlin Неудачные тесты котлинских модулей после плагина 3.0 Переназначение переменных посредством деструктурирования