2017-09-07 11 views
0

私は、拡張可能な行を持つリストビューを持っています。 iは、行をクリックすると、(例えば、画像ビューを私は(item_view(左)とitem_view_expanded(右))に非常に似ており、ほとんどすべての同じビューを有する別のXMLレイアウトを膨らませるが、いくつかの副ビューは、異なるサイズで表示され拡張されたビューに1つの追加ボタンがあります(写真の保存)。 kotlinするために、このファイルを変換し、kotlin合成の拡張機能を使用してビューにアクセスしようとしたら2つのxmlレイアウトでKotlin合成拡張を使用して同じビューホルダーを使用できますか?

Collapsed View Expanded View

、私はエラー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); 
     } 
    } 
} 

答えて

0

のためのJavaコードは、問題がimport文のいずれかを除去することにより、固定されているが判明しています。私の場合は、追加のダウンロードボタンを持っていた1(2のスーパーセット)

を維持するために必要
関連する問題