美文网首页
记录Room使用中的一个坑

记录Room使用中的一个坑

作者: 12313凯皇 | 来源:发表于2019-11-28 18:15 被阅读0次

先说在哪:

当已监听数据库中某几条数据时,如果数据库中某一条(可以不是前面说的那些数据)数据发生了变化,那么前面所有的监听都会收到通知

例如:

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去监听整个数据表。

相关文章

网友评论

      本文标题:记录Room使用中的一个坑

      本文链接:https://www.haomeiwen.com/subject/ldtiwctx.html