gpt4 book ai didi

android - 适配器中有多种不同的布局

转载 作者:行者123 更新时间:2023-11-29 19:26:25 25 4
gpt4 key购买 nike

我有一个小问题。我试图在 RecyclerView 中显示多种不同的布局。我设法通过两种不同的方式做到这一点。但我觉得我的代码和逻辑可以看起来更好

我的项目本身遵循 MVVM 设计模式。所以我使用 native 数据绑定(bind)。这就是为什么我的逻辑成为一个问题。

第一种方法

我尝试执行此操作的第一种方法是将所有内容压缩到一个大布局文件中。然后根据帖子的类型隐藏和显示。

  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());
}

所以首先我只是显示和隐藏正在使用和未使用的 View 。我还为一些 View 添加了额外的逻辑。

这个解决方案感觉非常糟糕,因为它包含大量硬编码,并且业务逻辑被添加到 fragment 中。

第二种方法

我为每个帖子添加了一个新的布局文件。他们都有自己的绑定(bind)。这最小化了代码。

    if (item.getType() == POST_TEXT) {
AdapterFeedType1Binding binding = DataBindingUtil.inflate(inflater,R.layout.adapter_feed_type_1,holder.binding.mainFrame,true);
binding.setGameFeedItem(item);
}

但是有更好的方法吗?所以我不必为每种类型的帖子创建一个新的绑定(bind)类?

最佳答案

第二个选项更好。仍然会有多个生成的绑定(bind)类,但是如果您这样做,您可以通过单个接口(interface)访问它们:

private static final int[] LAYOUT_IDS = {
R.layout.adapter_feed_type_1,
R.layout.adapter_feed_type_2,
...};


public MyViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
int layoutId = LAYOUT_IDS[viewType];
ViewDataBinding binding = DataBindingUtil.inflate(inflater, layoutId,
parent, false);
MyViewHolder viewHolder = new MyViewHolder(binding);
return viewHolder;
}

public void onBindViewHolder (MyViewHolder holder, int position) {
Item item = getItemAtPosition(position); // your method
holder.binding.setVariable(BR.gameFeedItem, item);
holder.binding.executePendingBindings();
}

只要所有变量的名称相同(在本例中为 gameFeedItem),该系统就可以工作。我假设一个名为 MyViewHolderViewHolder 具有 Binding 作为公共(public)最终字段。

关于android - 适配器中有多种不同的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com