Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在其他活动中添加了数据,如何更新recyclerView?_Java_Android_Sqlite_Android Recyclerview_Android Sqlite - Fatal编程技术网

Java 如果在其他活动中添加了数据,如何更新recyclerView?

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

我有一个SQLite数据库,我使用
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后显示数据。也许这只是安卓系统又一次“抓住你了”。似乎无法在不重新加载活动的情况下刷新数据:/