记录Room使用中的一个坑
2019-11-28 本文已影响0人
12313凯皇
先说坑在哪:
当已监听数据库中某几条数据时,如果数据库中某一条(可以不是前面说的那些数据)数据发生了变化,那么前面所有的监听都会收到通知。
例如:
final StudentRepository repository = new StudentRepository(getApplication());
//监听学号为1的学生
repository.getStudent(1).observe(this, new Observer<Student>() {
@Override
public void onChanged(Student student) {
Log.d(TAG, "onChanged: student 1 changed");
}
});
repository.getStudent(2).observe(this, new Observer<Student>() {
@Override
public void onChanged(Student student) {
Log.d(TAG, "onChanged: student 2 changed");
}
});
repository.getStudent(3).observe(this, new Observer<Student>() {
@Override
public void onChanged(Student student) {
Log.d(TAG, "onChanged: student 3 changed");
}
});
databinding.addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Student student = new Student(4, "tom", "English");
repository.insert(student);
}
});
我显示监听了学号为1、2、3的学生,然后点击button插入了一个学号为4的学生,这时前面的三个监听都会收到消息:
因为老的项目使用的是listView,所以想要监听的话我就一个一个监听的,但是当第二个刷新界面的时候,每个位置的item相当于添加了两个监听事件,所以就出现问题了。最好的解决方法我觉得应该是RecyclerView + listAdapter去监听整个数据表。