【发布时间】: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);
}
}
}
【问题讨论】:
-
一次只能加载10个项目是设计要求吗?这似乎没有必要,如果不可能重复:stackoverflow.com/questions/38873402/…
标签: android android-recyclerview realm