我已经开始使用 Realm,一切都运行良好,几乎都很顺利。
我正在使用 MultiAutoCompleteTextView 来选择一些用户(RealmObject)。
以下是我的过滤器(适配器的内部类):
private class UserFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filterResults.values = mUsers;
filterResults.count = mUsers.size();
} else {
final String lastToken = constraint.toString().toLowerCase();
final List<User> list = new ArrayList<>();
RealmQuery<User> query = realm.where(User.class);
query.contains("nickname", lastToken, false);
RealmResults<User> result = query.findAll();
list.addAll(result);
filterResults.values = list;
filterResults.count = list.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredUsers = (List<User>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
在我的适配器中: 在getView方法中:
EGCUser user = getItem(position);
holder.mName.setText(user.getNickname());
用户是无效的对象,我尝试了很多不同的方法,但都失败了。因此,我想知道该怎么做才能实现它。我有很多线程问题,所以可能是内部类的问题?
谢谢。
编辑:在这种情况下,我应该在哪里执行Realm.getInstance()?
现在,我将上下文传递给我的适配器,并在适配器的构造函数中执行它,并将realm对象存储在变量中。
编辑2:我让它工作了,但我不知道这是我们应该做的方式:
在我的performFiltering中,我做了这个:
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
final List<User> list = new ArrayList<>();
Realm realm = Realm.getInstance(mContext);
RealmQuery<User> query = realm.where(User.class);
query.contains("nickname", lastToken, false);
RealmResults<User> result1 = query.findAll();
list.addAll(result1);
filterResults.values = list;
filterResults.count = list.size();
}
});
但我会为此开放反馈。