我正在创建一个带有从Firebase中提取数据的片段的Android应用程序。在哪里设置Firebase AddValueEventListener片段?
目前,我在onStart()
方法中设置了我的addValueEventListener
,该方法能够在第一次访问片段时从Firebase提取数据,但当我更改为查看应用中的其他片段并返回到原始片段时, Firebase数据会消失,直到我旋转屏幕。
我应该在哪里放置我的AddValueEventListener
方法来解决这个问题?
我正在创建一个带有从Firebase中提取数据的片段的Android应用程序。在哪里设置Firebase AddValueEventListener片段?
目前,我在onStart()
方法中设置了我的addValueEventListener
,该方法能够在第一次访问片段时从Firebase提取数据,但当我更改为查看应用中的其他片段并返回到原始片段时, Firebase数据会消失,直到我旋转屏幕。
我应该在哪里放置我的AddValueEventListener
方法来解决这个问题?
简短回答:将其添加到onResume
方法中,并在方法中将其删除。
龙答: 片段由FragmentManager,在大多数情况下保持片段的实例,以便它并不需要创建一个新的片段,你想让它显示每次管理。因此,方法onCreate
,onCreateView
,onStart
将在创建片段或改变配置(即屏幕旋转)时调用一次。
另一方面,onResume
方法将被称为每次你的片段正在采取的焦点,所以加入addValueEventListener
将始终被调用。但是,这将导致增加多个值甚至听者,所以在方法中removeEventListener
是一个好习惯。
请参阅:https://developer.android.com/guide/components/fragments.html
只需在onCreateView()
片段的方法内添加addValueEventListener
。然后将您的值存储到ArrayList
或任何其他集合类。只需将此值从ArrayList
显示为Fragment
即可。
通知:您不能存储您的值outside the onDataChange()
方法addValueEventListener
。因此,只需使用arraylist参数创建一个方法,并将onDataChange()
方法中的值传递给新创建的方法。这样你的数据不应该是null
,你不会得到NullPointerException
看到这个doc欲了解更多信息。
您是否希望您的数据始终处于活动状态? –
我不知道你的意思是活着,但我希望它在每次访问该特定片段时都显示给用户 –
我试过并意识到问题出在我正在片段中使用的FragmentPagerAdapter,但是谢谢! –