작은 문제가 있습니다. RecyclerView에 여러 레이아웃을 표시하려고합니다. 나는 이것을 두 가지 다른 방식으로 관리했다. 하지만 내 코드와 논리가 훨씬 좋아 보일 수 있다고 생각합니다.어댑터에 여러 레이아웃이 있습니다.
내 프로젝트 자체가 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은 찾고자하지만 찾지 못한 곳입니다. 고마워. 덕분에 깨끗한 솔루션을 만들 수있었습니다. –