私は、拡張可能な行を持つリストビューを持っています。 iは、行をクリックすると、(例えば、画像ビューを私は(item_view
(左)とitem_view_expanded
(右))に非常に似ており、ほとんどすべての同じビューを有する別のXMLレイアウトを膨らませるが、いくつかの副ビューは、異なるサイズで表示され拡張されたビューに1つの追加ボタンがあります(写真の保存)。 kotlinするために、このファイルを変換し、kotlin合成の拡張機能を使用してビューにアクセスしようとしたら2つのxmlレイアウトでKotlin合成拡張を使用して同じビューホルダーを使用できますか?
、私はエラーOverload Resolution Ambiguity
を受け取ります。確かに同じIDを持っているとの両方このファイルにインポートされている2つのXMLファイルがあるので、これは理にかなっています。私は(そのようthis oneなど)を参照してくださいほとんどのstackoverflowのポストはimport文の1つを取り外しまたはIDを変更することで解決されます。しかし、私はこれらの異なるビューの両方をバインドすることができますつの共有ViewHolderを持ちたいので、IDが一致します。結局のところ、テキストビューと画像は、同じ内容であり、ちょうど異なるビジュアルレイアウトである。
バタフライナイフでJavaでこれを行うことができます。折りたたみレイアウト(download
)に存在しないボタンにヌル入力可能なアノテーションを付けるだけで、バインディングでいくつかのヌルチェックを行うだけです。私はほとんどすべてが同じであるので、私はどのように2つのXMLレイアウトが同じバインディングを使用することができますかと思います。これは、合成拡張を使用してkotlinで行うことができますか?ここで
は私の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);
}
}
}