如果在另一个活动中添加数据,如何更新recyclerView?

时间:2018-06-02 18:19:17

标签: java android sqlite android-recyclerview android-sqlite

我有一个SQLite数据库,我使用MainActivitySecondActivityDatabaseHelper更新。

MainActivity中,我有一个RecyclerView和一个包含数据库中项目的ArrayList。在SecondActivityEditText更新/创建数据。

例如,在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));

...并返回MainActivityRecyclerView不会更新。我试过了:

  • 在适配器上调用.notifyDataSetChanged();
  • 在arrayList上调用.clear(),然后再次添加项目,并调用.notifyDataSetChanged();
  • 在onResume中使用runOnUIThread执行上述操作;
  • 使MainActivity中的适配器变为静态(内存泄漏和错误)并从SecondActivity更新,这在大多数时间都有效...

...那么,当我更改RecyclerView中的数据时,如何正确更新MainActivity中的SecondActivity?如果我错过了任何细节,请告诉我!谢谢!

修改

SecondActivity中添加新数据并返回MainActivity,当我打印ArrayList时,在onResume()中运行上述方法,我看不到最新的项目。但是,如果我打开SecondActivity(不添加数据)并直接返回 - 新数据位于ArrayList中,并显示在RecyclerView中。 出于某种原因(可能由我造成),我必须在显示新数据之前打开活动两次。

Here's the screen recording in Youtube

2 个答案:

答案 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);

注册观察者后,对于您在数据库表中所做的任何更改,列表将自动更新。

如果您有任何其他问题,请与我们联系。希望有所帮助。