我有一个SQLite数据库,我使用MainActivity
从SecondActivity
和DatabaseHelper
更新。
在MainActivity
中,我有一个RecyclerView
和一个包含数据库中项目的ArrayList。在SecondActivity
我EditText
更新/创建数据。
例如,在DatabaseHelper.java
类中,我有一个从数据库中删除注释的方法:
public void deleteNote(String table, Note note) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(table, Note.COLUMN_ID + " = ?", new String[]{String.valueOf(note.getId())});
db.close();
}
我可以在MainActivity
所用的RecyclerView
中使用它,但是:
db.deleteNote("notes", notesList.get(position));
notesList.remove(position);
adapter.notifyItemRemoved(position);
现在,当我删除SecondActivity
中的注释时:
private DatabaseHelper db = new DatabaseHelper(this);
List<Note> notesList = new ArrayList<>();
notesList.addAll(db.getAllNotes("notes")); //add all from "notes" table
//...
db.deleteNote("notes", notesList.get(intentExtra));
...并返回MainActivity
,RecyclerView
不会更新。我试过了:
.notifyDataSetChanged()
; .clear()
,然后再次添加项目,并调用.notifyDataSetChanged()
; runOnUIThread
执行上述操作; ...那么,当我更改RecyclerView
中的数据时,如何正确更新MainActivity
中的SecondActivity
?如果我错过了任何细节,请告诉我!谢谢!
修改
在SecondActivity
中添加新数据并返回MainActivity
,当我打印ArrayList时,在onResume()
中运行上述方法,我看不到最新的项目。但是,如果我打开SecondActivity(不添加数据)并直接返回 - 新数据位于ArrayList中,并显示在RecyclerView
中。 出于某种原因(可能由我造成),我必须在显示新数据之前打开活动两次。
答案 0 :(得分:1)
好的,据我所知,你没有在onPause()中更新列表,也没有在onStart()中更新。 OnCreate()在创建活动时只调用一次,当您返回到此Acitivity时,仅调用onStart()然后调用onPause(),因此您需要在onStart()方法中从DB检索数据并再次填充列表。希望它能奏效!
答案 1 :(得分:1)
我创建了一个Github Project here来解释更新sqlite数据库中的表中数据的详细信息,然后在显示数据的列表中获取反射。我添加了单独的活动来更新列表中项目的数据,然后在返回主活动时,列表将使用最新更新进行更新。希望你看看。
目的是展示如何使用SQLite数据库以及内容观察器的实现来完成数据库操作,以便在注册内容观察器时可以立即在列表中看到用户表中的更新使用包含列表的活动中的以下命令到用户表。
this.registerContentObserver(cursor, DBConstants.DB_TABLE_USER_URI);
注册观察者后,对于您在数据库表中所做的任何更改,列表将自动更新。
如果您有任何其他问题,请与我们联系。希望有所帮助。