gpt4 book ai didi

java - android - RecyclerView - 不创建项目(跳过它)

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

我有一个 RecyclerView,如果我的 ViewModel 中的一个字段为空,我需要在我的 Adapter 中使用一些 if 语句 来使 RecyclerView 跳过并且不创建项目。例如,我有带有标题和图片的 ViewModel,因此如果标题为空 - 不要为其创建项目。所以:

if (TextUtils.isEmpty(viewModel.getMessages().getTitle())) {
//do something?
}

这应该很简单,但我才刚刚开始练习 RecyclerView :)

最佳答案

有几种方法可以解决这个问题:

  1. 首先,您可以只隐藏在 onBindViewHolder() 中传递的 ViewHolder 实例。 RecyclerView 不关心您如何将数据与 UI 绑定(bind)。只需在 onBindViewHolder() 中执行操作并更新您的 UI。

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    if (TextUtils.isEmpty(viewModel.getTitle())) {
    holder.itemView.setVisibility(View.GONE);
    }
    }
  2. 在将数据传递给 RecyclerView.Adapter 类之前预先过滤您的数据。这是推荐的方法,因为您不想将“数据源”代码与“UI”代码混合。您的 RecyclerView.Adapter 应该只关注填充 UI。如果您使用 RxJava,这只需一行代码即可实现。

    getYourListObservable() 
    .filter(new Predicate<ViewModel>() {
    @Override
    public boolean test(@NonNull ViewModel viewModel) throws Exception {
    return !TextUtils.isEmpty(viewHolder);
    }
    })
    .subscribe(...) // this is where you pass data to your RecyclerView.Adapter object

我推荐第二种方法,因为它可以让您的代码更简洁。

PS:这是retro-lamdba代码

getYourListObservable() 
.filter(viewModel -> !TextUtils.isEmpty(viewModel.getTitle))
.subscribe(...) // where you pass data to RecyclerView.Adapter object

关于java - android - RecyclerView - 不创建项目(跳过它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45096495/

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