如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)

Posted

技术标签:

【中文标题】如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)【英文标题】:How to update recycler view (data from sqllite) without restarting the activity 【发布时间】:2021-12-06 19:13:24 【问题描述】:

我有一个带有对话框片段的单个活动应用程序 (MainActivity)。 DialogFragment 将数据添加到 sqllite 数据库,而 MainActivity 在回收器视图中显示数据。我面临的问题是,当我单击 DialogFragment 中的“添加按钮”并将其关闭时,在重新创建活动之前,新插入的数据不会显示在回收器视图中。

如何在不重新启动应用程序的情况下显示新数据。我已经在DialogFragment类中添加了“recyclerViewAdapterObject.notifyDataSetChanged”,但是还是不行!

【问题讨论】:

如果您需要具体帮助,请添加一些代码。但一般来说,您需要从数据库重新加载数据(或者有一些实时数据,在这种情况下会自动通知观察者) 可以通过维护activity生命周期方法来解决。您只需覆盖 onResume() 方法。将您的“数据获取”代码放在 onResume() 方法中,并在数据保存之后和 dialogfragment 关闭之前调用 onResume()。这可以解决您的问题。但不建议这样做。您应该使用 viewModel、livedata。 【参考方案1】:

您可以通过以下活动生命周期方法解决它。您只需覆盖 onResume() 方法。将您的“数据获取”代码放入 onResume() 方法中,并在数据保存之后和 DialogFragment 关闭之前调用 onResume()。这可以解决您的问题。 但不推荐。您应该学习使用 ViewModel、LiveData。

例子:

 override fun onResume() 
        super.onResume()
        findViewById<RecyclerView>(R.id.rvSocket).also  rv ->
            var userList : List<User> = fatchDataFromSQLite()
            rv.layoutManager = LinearLayoutManager(this)
            rv.setHasFixedSize(true)
            adapter = UserAdapter(userList)
            rv.adapter = adapter
        
    

然后调用 onResume() 方法,在关闭 DialogFragment 之前通过单击按钮保存数据。

【讨论】:

以上是关于如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新启动的情况下更新机器人状态中的“bot.users.size”

在不重新加载活动的情况下更新回收站视图中的内容

是否可以在不重新启动 JSF 中的服务器的情况下更新应用程序?

如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点

有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?

在不重新启动节点应用程序的情况下更新节点应用程序依赖项