我有一个包含可扩展行的列表视图。当我点击该行时,我会膨胀一个非常相似的不同xml布局(item_view
(左)和item_view_expanded
(右))并且几乎所有相同的视图,但是一些子视图出现在不同尺寸(例如放大图像视图),展开视图中还有一个附加按钮(保存照片)。
将此文件转换为kotlin并尝试使用kotlin合成扩展程序访问视图时,我收到错误Overload Resolution Ambiguity
。这是有道理的,因为确实存在两个具有相同ID的xml文件,并且都在此文件中导入。我看到的大多数stackoverflow帖子(例如this one)都是通过删除一个import语句或更改id来解决的。但我希望id匹配,因为我想拥有一个可以绑定这两个不同视图的共享ViewHolder。毕竟,文本视图和图像都是相同的内容,只是在不同的视觉布局中。
我可以使用butterknife在Java中执行此操作,因为我只是将折叠布局(download
)中不存在的按钮注释为可为空,并在绑定中执行一些空检查。我想知道如何让两个xml布局使用相同的绑定,因为几乎所有内容都是相同的。可以使用合成扩展在kotlin中完成吗?
以下是我的ViewHolder的
的java代码 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);
}
}
}
答案 0 :(得分:0)
通过删除其中一个import语句来解决问题。在我的情况下,我需要保留一个有额外下载按钮(两个超集)的那个