- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 SearchView 来过滤 RealmRecyclerViewAdapter 提供的列表。我已经尝试了 StackOverflow 上建议的几种方法,包括: EpicPandaForce's suggestion
无济于事。当我到达这里时:updateData(新 Realm 查询),什么也没有发生。
这是我的代码。我从 Lucas Urbas 的 Material Master/Detail 案例研究开始,并开始向其中添加一些内容来帮助自己学习如何操作。在 PeopleFragment 内部,我修改了 setUpToolbar 和 setUpRecyclerView 方法,如下所示:
private void setUpToolbar() {
if (DEBUG) Log.i(TAG, "Reached setUpToolbar") ;
CustomAppBar appBar = ((MainActivity) getActivity()).getCustomAppBar() ;
appBar.setTitle(getString(R.string.fragment_people__title)) ;
appBar.setMenuRes(R.menu.people_general, R.menu.people_specific, R.menu.people_merged) ;
// Set up search
searchItem = appBar.getToolbarSpecific().getMenu().findItem(R.id.menu_people__search) ;
searchView = (SearchView) searchItem.getActionView() ;
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if(DEBUG) Log.i(TAG, "Reached onQueryTextSubmit") ;
adapter.updateData(realm.where(Person.class).equalTo("userId", userid).contains("name", query).findAll()) ;
return true ;
//return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if(DEBUG) Log.i(TAG, "Reached onQueryTextChange") ;
adapter.updateData(realm.where(Person.class).equalTo("userId", userid).contains("name", newText).findAll()) ;
return true ;
//return false;
}
}) ;
// Set up menu item click listener
appBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (DEBUG) Log.i(TAG, "Reached onMenuItemClick") ;
// handle selection of action bar items
switch (item.getItemId()) {
case R.id.menu_people__add:
presenter.clickAddPerson() ;
return true ;
case R.id.menu_people__search:
return true ;
case R.id.menu_people__settings:
presenter.clickSettings() ;
return true ;
case R.id.menu_people__logout:
sessionManager.logoutUser() ;
return true ;
}
return false ;
}
}) ;
} // end of setUpToolbar method
private void setUpRecyclerView() {
if (DEBUG) Log.i(TAG, "Reached setUpRecyclerView") ;
recyclerView.setHasFixedSize(true) ;
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()) ;
layoutManager.setOrientation(LinearLayoutManager.VERTICAL) ;
recyclerView.setLayoutManager(layoutManager) ;
recyclerView.setEmptyView(emptyView) ;
adapter = new PeopleAdapter(realm.where(Person.class).equalTo("userId", userid).findAll()) ;
adapter.setOnPersonClickListener(new PersonView.OnPersonClickListener() {
@Override
public void onPersonClick(Person person) {
presenter.clickPerson(person) ;
}
@Override
public void onPersonActionClick(final Person person) {
presenter.clickPersonAction(person) ;
// ToDo: this should be in the presenter, but I don't have realm in there yet
final Person newFave = realm.where(Person.class)
.equalTo("id", person.getId())
.findFirst() ;
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
newFave.setIsFavorite(!person.getIsFavorite()) ;
}
}) ;
}
}) ;
recyclerView.setAdapter(adapter) ;
} // end of setUpRecyclerView method
这是 PeopleAdapter 的大部分内容:
class PeopleAdapter
extends RealmRecyclerViewAdapter<Person, PeopleAdapter.PersonViewHolder> {
private final String TAG = "PeopleAdapter" ;
private final boolean DEBUG = true ;
private OrderedRealmCollection<Person> peopleList ;
private PersonView.OnPersonClickListener onPersonClickListener ;
static class PersonViewHolder extends RecyclerView.ViewHolder{
PersonView personView ;
PersonViewHolder(PersonView personView) {
super(personView) ;
this.personView = personView ;
}
} // end of PersonViewHolder class
// Constructor
PeopleAdapter(OrderedRealmCollection<Person> data) {
super(data, true, true) ; // data, autoUpdate, updateOnModification
setHasStableIds(true) ;
this.peopleList = data ;
}
void setOnPersonClickListener(PersonView.OnPersonClickListener onPersonClickListener) {
this.onPersonClickListener = onPersonClickListener ;
}
@Override
public PeopleAdapter.PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
PersonView view = (PersonView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_view_person, parent, false) ;
return new PersonViewHolder(view) ;
}
@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
holder.personView.setUser(peopleList.get(position)) ;
holder.personView.setOnPersonClickListener(onPersonClickListener) ;
}
@Override
public int getItemCount() {
// If the peopleList is null, return 0, otherwise return the number of items in the list
return peopleList == null ? 0 : peopleList.size() ;
}
我到处都有日志消息,但我删除了其中大部分以便于阅读。基本上,无论我尝试这种方式,还是尝试使用实现可过滤的适配器,它都会直接执行 updateData 方法,而不会崩溃、抛出异常或指示任何问题,但它什么也不做。 SearchView 出现,文本被输入并成为新查询的一部分,查询被移交给 updateData,然后......什么也没有。
Realm 插件 4.2.0、AndroidStudio 2.3.3、目标 sdk 25、运行 Android 7.0 的 Samsung Galaxy S2
我希望有人可以提供帮助,因为我尝试了针对像我这样的问题已经给出的答案,但我很困惑。谢谢
最佳答案
RealmRecyclerViewAdapter 中没有 peopleList
变量,请使用 getData()
。
编辑:您的适配器应如下所示:
class PeopleAdapter
extends RealmRecyclerViewAdapter<Person, PeopleAdapter.PersonViewHolder> {
private final String TAG = "PeopleAdapter" ;
private final boolean DEBUG = true ;
private PersonView.OnPersonClickListener onPersonClickListener ;
static class PersonViewHolder extends RecyclerView.ViewHolder{
PersonView personView ;
PersonViewHolder(PersonView personView) {
super(personView) ;
this.personView = personView ;
}
} // end of PersonViewHolder class
// Constructor
PeopleAdapter(OrderedRealmCollection<Person> data) {
super(data, true, true) ; // data, autoUpdate, updateOnModification
}
void setOnPersonClickListener(PersonView.OnPersonClickListener onPersonClickListener) {
this.onPersonClickListener = onPersonClickListener ;
}
@Override
public PeopleAdapter.PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
PersonView view = (PersonView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_view_person, parent, false) ;
return new PersonViewHolder(view) ;
}
@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
holder.personView.setOnPersonClickListener(onPersonClickListener) ;
holder.personView.setUser(getData().get(position)) ;
}
}
关于java - 在 RealmRecyclerViewAdapter 上调用 updateData 实际上并不是更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403263/
在我的项目中,我有一个“员工”集合,其中每个员工文档都包含以下文件:firstName、lastName、zipCode、refreshToken 等。当尝试仅更新 refreshToken 的值时,
我有一个数组,我想在其中添加一些数据。如果文档不存在,它应该创建一个新文档,但这不起作用。它仅适用于已创建的文档。这是我的代码: let washingtonRef = db.collecti
谁能告诉我为什么在我的基于 VC++ 对话框的应用程序中调用消息框之前调用 UpdateData(FALSE) 不起作用?运行时窗口保持不变,直到我调用: MessageBoxW(cDisp, L"!
我正在尝试使用 SearchView 来过滤 RealmRecyclerViewAdapter 提供的列表。我已经尝试了 StackOverflow 上建议的几种方法,包括: EpicPandaFor
我使用 Visual Studio 2010,使用 MFC 2008/2010。我对 THREAD 和 UPDATEDATA(FALSE) 有疑问这是初始化函数 BOOL CBkav_btap2_ap
我有一个 Shiny 的应用程序,它使用 reactable 来显示任务的状态。状态列的信息采用颜色编码,数据使用 updateReactable() 进行更新。 最初颜色背景是正确的(例如红色表示打
更新 我遇到了与 Firestore 的点表示法不一致的情况,并了解到我们在使用 setData 操作时必须使用文字表示法,并且在使用 updateData 操作时可以使用点表示法。 以下操作忽略点符
我有一个应用程序,其中有一个编辑框。此编辑框允许用户输入最多 20 个字符的任何字符。 现在我已经编写了一个函数来处理事件的编辑更改 ON_EN_CHANGE void CDlgFloatingEdi
我正在尝试做一些事情,如果不存在文档,则执行 setData,如果文档存在,则执行更新数据......我已经尝试过这个(下面的代码),它似乎有效,但我是担心如果我启动应用程序时错误消息发生变化怎么办。
我有一个计数值为 1 的现有文档。当我使用 FieldValue.increment(1) 和 setData(应该用新的增量值覆盖)时,它不增加值,但使用与 updateData 相同的方法,将值增
我在 Cloud Firestore 中有一个文档。 “事件”字段的结构如下: { "events" : [ "eventID-1": [ "value1",
我在 Cloud Firestore 中有一个文档。 “事件”字段的结构如下: { "events" : [ "eventID-1": [ "value1",
我是一名优秀的程序员,十分优秀!