2016-12-12 36 views
1

我正在创建一个带有从Firebase中提取数据的片段的Android应用程序。在哪里设置Firebase AddValueEventListener片段?

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

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

+0

您是否希望您的数据始终处于活动状态? –

+0

我不知道你的意思是活着,但我希望它在每次访问该特定片段时都显示给用户 –

+0

我试过并意识到问题出在我正在片段中使用的FragmentPagerAdapter,但是谢谢! –

回答

3

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

龙答: 片段由FragmentManager,在大多数情况下保持片段的实例,以便它并不需要创建一个新的片段,你想让它显示每次管理。因此,方法onCreateonCreateView,onStart将在创建片段或改变配置(即屏幕旋转)时调用一次。

另一方面,onResume方法将被称为每次你的片段正在采取的焦点,所以加入addValueEventListener将始终被调用。但是,这将导致增加多个值甚至听者,所以在方法中removeEventListener是一个好习惯。

请参阅:https://developer.android.com/guide/components/fragments.html

0

只需在onCreateView()片段的方法内添加addValueEventListener。然后将您的值存储到ArrayList或任何其他集合类。只需将此值从ArrayList显示为Fragment即可。

通知:您不能存储您的值outside the onDataChange()方法addValueEventListener。因此,只需使用arraylist参数创建一个方法,并将onDataChange()方法中的值传递给新创建的方法。这样你的数据不应该是null,你不会得到NullPointerException

看到这个doc欲了解更多信息。