Java 如果在其他活动中添加了数据,如何更新recyclerView?
我有一个SQLite数据库,我使用Java 如果在其他活动中添加了数据,如何更新recyclerView?,java,android,sqlite,android-recyclerview,android-sqlite,Java,Android,Sqlite,Android Recyclerview,Android Sqlite,我有一个SQLite数据库,我使用DatabaseHelper从MainActivity和SecondActivity更新它 在MainActivity中,我有一个RecyclerView和一个包含数据库项的ArrayList。在SecondActivity中,我有EditText来更新/创建数据 例如,在DatabaseHelper.java类中,我有一个从数据库中删除注释的方法: public void deleteNote(String table, Note note) { SQ
DatabaseHelper
从MainActivity
和SecondActivity
更新它
在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));
private DatabaseHelper db=new DatabaseHelper(这个);
List notesList=new ArrayList();
notesList.addAll(db.getAllNotes(“notes”)//添加“注释”表中的所有内容
//...
db.deleteNote(“notes”,notesList.get(intentExtra));
…然后返回到main活动
,RecyclerView
不会更新。我试过:
- 在适配器上调用
李>.notifyDataSetChanged()
- 在arrayList上调用
,然后再次添加项,然后调用.clear()
李>.notifyDataSetChanged()
- 使用onResume中的
执行上述操作李>runOnUIThread
- 使MainActivity中的适配器处于静态状态(内存泄漏和错误)并从SecondActivity进行更新,这在大多数情况下都有效
SecondActivity
中更改数据时,如何正确更新main活动中的RecyclerView
?如果我遗漏了任何细节,请告诉我!谢谢大家!
编辑:
在SecondActivity
中添加新数据并返回到MainActivity
后,当我打印ArrayList时,在onResume()中运行上述方法,我看不到最新的项。但是,如果我打开SecondActivity(不添加数据)并直接返回,则新数据将显示在ArrayList中,并显示在RecyclerView
中由于某种原因(可能是我的原因),我必须在显示新数据之前打开活动两次。
好的,据我所知,您既没有在onStart()中更新列表,也没有在onPause()中更新列表。当活动正在创建时,OnCreate()只会被调用一次,当您返回此活动时,只会调用onStart()和onPause(),因此您需要在onStart()方法中从数据库检索数据并再次填充列表。希望它能起作用 我创建了一个示例来解释更新sqlite数据库中表中数据的细节,然后在显示数据的列表中获取反射。我添加了单独的活动来更新列表中某个项目的数据,然后当返回到主活动时,列表将使用最新的更新进行更新。希望你能看看
整个目的是展示如何使用SQLite数据库以及content observer的实现来完成数据库操作,以便在您使用活动中的以下命令将content observer注册到用户表时,可以立即在列表中看到用户表中的更新包含列表
this.registerContentObserver(cursor, DBConstants.DB_TABLE_USER_URI);
注册观察者后,该列表将根据您在数据库表中所做的任何更改自动更新
如果您还有任何问题,请告诉我。希望能有所帮助。请在您试图更新中数据的地方发布一段代码list@AlexeiArtsimovich完成。如果还有别的事,请告诉我!不,我指的是更新列表的方法,比如onStart()、onPause()或其他方法。如果你把你的全部代码都贴出来,那就更好了MainActivity@AlexeiArtsimovich哦,好的,明白了。我已经添加了代码。我不更新列表onStart(),也不更新onPause()。我在MainActivity的OnCreate()中创建了一次,但在SecondActivity中,我再次从db创建了一个新列表。您是否使用LoaderCallbacks
从数据库将数据加载到ArrayList
中?我希望是这样。这场惨败最好的一点是,我可以添加数据,返回,看到recyclerView没有更新。。。然后再次打开第二个活动(但不要添加数据)并返回。数据如图所示。onResume()也发生了同样的情况-它仅在我重新打开MainActivity后显示数据。也许这只是安卓系统又一次“抓住你了”。似乎无法在不重新加载活动的情况下刷新数据:/