私は小さな問題があります。私はRecyclerViewに複数の異なるレイアウトを表示しようとしています。私は2つの異なる方法でこれを行うことができました。しかし、私のコードとロジックがはるかによく見えるように感じるアダプターで複数の異なるレイアウト
私のプロジェクト自体は、MVVMデザインパターンに従っています。だから私はネイティブデータバインディングを使用しています。これが私の論理が問題になっている理由です。
私はこれを実行しようとした最初の方法でそれをやっての
最初の方法は、単に大きなレイアウトファイルにすべてをけいれんすることです。次に、それがあった投稿の種類に応じて非表示にして表示します。
private void onBindImagePost(CommentFeedViewHolder holder, CommentFeedItem item) {
holder.mBinding.adapterCommentFeedDraweeView.setVisibility(View.VISIBLE);
holder.mBinding.adapterCommentFeedTopic.setVisibility(View.VISIBLE);
holder.mBinding.adapterCommentFeedYoutubeContainer.setVisibility(View.GONE);
holder.mBinding.adapterCommentFeedVideoContainer.setVisibility(View.GONE);
holder.mBinding.adapterCommentFeedPieChartContainer.setVisibility(View.GONE);
holder.mBinding.adapterCommentFeedDraweeView.setImageURI(item.getUri());
}
まずは、使用中のビューを表示して非表示にするだけです。私はまた、いくつかのビューに余分なロジックを追加しました。
このソリューションはハードコーディングが多く含まれており、ビジネスロジックがフラグメントに追加されているため、非常に悪いと感じました。それをやっての
第二の方法は、
は、私は、各ポストのために新しいレイアウトファイルを追加しました。彼らはすべて彼ら自身の拘束力を持っています。 これによりコードが最小限に抑えられました。
if (item.getType() == POST_TEXT) {
AdapterFeedType1Binding binding = DataBindingUtil.inflate(inflater,R.layout.adapter_feed_type_1,holder.binding.mainFrame,true);
binding.setGameFeedItem(item);
}
もっと良い方法がありますか?だから私はポストのすべてのタイプの新しいバインディングクラスを作成する必要はありません?
ViewDataBindingは、探していたものの、見つけられなかったものです。どうもありがとう。これは私がクリーンなソリューションを作成するのに役立ちました –