Android 在片段中的何处设置Firebase AddValueEventListener?

Android 在片段中的何处设置Firebase AddValueEventListener?,android,android-fragments,firebase,firebase-realtime-database,Android,Android Fragments,Firebase,Firebase Realtime Database,我正在创建一个android应用程序,其中包含从Firebase提取数据的片段 目前,我已经在onStart()方法中设置了我的addValueEventListener,该方法能够在第一次访问片段时从Firebase中提取数据,但当我更改为在应用程序中查看其他片段并返回到原始片段时,Firebase数据将消失,直到我旋转屏幕 我应该把我的AddValueEventListener方法放在哪里来解决这个问题?只需在片段的onCreateView()方法中添加AddValueEventListen

我正在创建一个android应用程序,其中包含从Firebase提取数据的片段

目前,我已经在
onStart()
方法中设置了我的
addValueEventListener
,该方法能够在第一次访问片段时从Firebase中提取数据,但当我更改为在应用程序中查看其他片段并返回到原始片段时,Firebase数据将消失,直到我旋转屏幕


我应该把我的
AddValueEventListener
方法放在哪里来解决这个问题?

只需在片段的
onCreateView()方法中添加
AddValueEventListener
。然后将值存储到
ArrayList
或任何其他集合类中。只需将此
数组列表中的值显示到
片段中即可

注意:您不能将值
存储在
addValueEventListener
的onDataChange()方法之外。因此,只需使用arraylist参数创建一个方法,并将值从
onDataChange()
方法传递到新创建的方法。通过这种方式,您的数据不应该是
null
,也不会得到
NullPointerException


有关详细信息,请参见此。

简短回答:将其添加到
onResume
方法中,并在
onPause
方法中删除它

长答案: 片段由FragmentManager管理,在大多数情况下,FragmentManager保留片段的一个实例,这样它就不需要在每次需要显示片段时创建新片段。因此,在创建片段或更改配置(即屏幕旋转)时,将调用一次方法
onCreate
onCreateView
onStart

另一方面,
onResume
方法将在每次片段获得焦点时被调用,因此添加
addValueEventListener
将始终被调用。然而,这将导致添加多个值,甚至是侦听器,因此在
onPause
方法中
removeEventListener
是一个很好的做法


请参阅:

是否希望您的数据始终处于活动状态?我不确定您所说的“活动”是什么意思,但我希望在用户每次访问特定片段时都能将其显示给用户。我尝试过,并意识到问题在于我当前在片段中使用的FragmentPagerAdapter,但谢谢!