2016-03-02 110 views
0

我使用Android Studio的选项卡式活动启动了一个新项目。它使用ViewPager创建了一个活动,3个片段=片段1,片段2和片段3。 我改变了fragment1有一个listView和一个TextView,我创建片段时初始化。 listView中的数据是从SQL数据库中读取的。 当应用程序启动时,将显示fragment1,listView显示从SQL读取的数据。 当我从片段1滑动到片段2并返回时,片段1正确显示了列表视图。但是,当我滑动到fragment3并返回到fragment1时,listview数据会丢失,并且出现空白屏幕,但textview正确显示。 当我将应用程序更改为只有2个片段时,它不会发生,我可以从fragment1滑动到fragment2并多次回放,而不会丢失任何数据。当我添加第三个片段时,数据在首次滑动到片段3时丢失,但如果仅在片段1和片段2之间滑动,则不会丢失数据。 任何想法为什么会发生?ViewPager中的片段丢失了视图

+0

如果没有一个可重复的例子,就不可能确切地说明它发生的原因。两个片段不会发生问题的原因是FragmentPagerAdapter使两个片段都保持活动状态,请参阅此处:http://stackoverflow.com/questions/8348707/prevent-viewpager-from-destroying-off-screen-views和here :http://stackoverflow.com/questions/10853611/viewpager-with-fragments-onpause-onresume –

+0

该项目太大,无法发布。如果我们很快就找不到解决方案,我会创建一个小版本发布。 – Zvi

+0

该项目太大而无法发布。如果我们很快就找不到解决方案,我会创建一个小版本发布。 无论如何,我进一步测试,发现发生的事情是,该列表视图失去了它的适配器(listView.getAdapter()返回null)。所以在页面重新显示之前,我现在测试这个条件,如果存在,我重新创建适配器,并且列表显示正确。 这可以给你一个提示发生什么? – Zvi

回答

0

问题已解决。问题是由于适配器在内存中保留了3个片段,正如@Daniel Nugent所指出的。页面中的数据是从数据库中加载的,因此当重新创建视图时,碎片被销毁并在用户滑动时重新创建时,列表视图适配器已丢失数据,并且必须重新填充数据。这个问题并没有出现在简单的例子中,因为通常所呈现的数据是静态的并且在onCreateView方法中加载。