【问题标题】:Limit recyclerview items to only 10 without paginating with filter将 recyclerview 项目限制为仅 10 个,无需使用过滤器进行分页
【发布时间】:2018-03-28 16:42:44
【问题描述】:

我正在使用带有 283 个项目的 Recycler View 和一个普通的 TextView 来过滤列表。

我只想一直显示 10 条记录。

我不能使用 getCount(或 GetItemCount),因为当我过滤列表时,它会给我 IndexOutOfBoundsExceptions,有没有其他方法可以做到这一点?

public class RealmAutoCompleteAdapter extends RecyclerView.Adapter<RealmAutoCompleteAdapter.ProductViewHolder>  {
Realm realm;

RealmChangeListener<RealmResults<FieldsItem>> realmChangeListener;
RealmResults<FieldsItem> items;
String searchTerm;

public RealmAutoCompleteAdapter(Realm realm, RealmResults<FieldsItem> items) {
    this.realm = realm;
    this.realmChangeListener = new RealmChangeListener<RealmResults<FieldsItem>>() {
        @Override
        public void onChange(RealmResults<FieldsItem> results) {
            notifyDataSetChanged();
        }
    };
    this.items = items;
    items.addChangeListener(realmChangeListener);
}

@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ProductViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.autocomplete_row, parent, false));
}

@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
    FieldsItem item = items.get(position);
    holder.title.setText(item.getTitle());
}

public void updateInput(String input) {
    this.searchTerm = input;
    if(items != null && items.isValid()) {
        items.removeAllChangeListeners();
    }
    RealmQuery<FieldsItem> query = realm.where(FieldsItem.class);
    if(searchTerm != null && !"".equals(searchTerm)) {
        query = query.contains("title", searchTerm, Case.INSENSITIVE);
    }
    items = query.findAll();
    items.addChangeListener(realmChangeListener);
    notifyDataSetChanged();
}

@Override
public int getItemCount() {
    if(items == null || !items.isValid()) {
        return 0;
    }
    return items.size();
}

static class ProductViewHolder extends RecyclerView.ViewHolder {

    TextViewWithFont title;
    ProductViewHolder(View itemView) {
        super(itemView);
        title = (TextViewWithFont)itemView.findViewById(R.id.title);
    }

}

}

【问题讨论】:

标签: android android-recyclerview realm


【解决方案1】:

你可以这样做:

return Math.min(items.size(), 10);

【讨论】:

  • 是否可以在 Activity 而不是适配器中执行此操作?喜欢将适配器设置为仅显示 10 个项目?
  • 那么适配器会根据您在getItemCount() 中返回的内容来决定这一点。
  • 谢谢,很好的解决方案。
  • 这应该被标记为答案。
猜你喜欢
  • 2016-11-30
  • 2020-09-06
  • 2019-07-22
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多