2013-01-05 84 views
0

我使用FrameLayout的持有者活动。Android片段意外关闭

在那里我放了一个带有listview的片段。它工作正常。

ft = getSupportFragmentManager().beginTransaction(); 
ft.add(R.id.fragments, feedFragment); 
ft.commit(); 

然后添加其他片段。

android.support.v4.app.Fragment targetFragment = new MainPhotoFragment(); 
ft = getSupportFragmentManager().beginTransaction(); 
ft.add(R.id.fragments, targetFragment); 
ft.addToBackStack(null); 
ft.commit(); 

这里我用加(),而不是取代()击中返回键可返回到列表视图的以前的位置。它工作正常。

但是可以从第二个片段导航到第三个片段。

android.support.v4.app.Fragment targetFragment = new FullPhotoFragment(); 
ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.fragments, targetFragment); 
ft.addToBackStack(null); 
ft.commit(); 

这里我使用替换强制第二个片段重新加载时,返回键。

有时从第三个片段返回键可以正常工作,它显示出现时重新加载的第二个片段。

但有时(正如我可以看到它发生在我第一次尝试这些步骤时)从第三个片段回到关键位置,导致我到第一个片段,关闭第二个片段,违背了我的期望。第一个片段正在重新加载。

如何防止这种奇怪的行为?

回答

1

add()方法会将Fragments添加到Container,并且添加到容器的任何其他片段将排队返回到第一个片段。除非第一个片段变为隐形,否则它们将不可见。我希望这是你所面临的问题。如果您也使用replace()进行第一个 - >第二个片段导航,那就太好了。

+0

如果使用replace()进行第一个 - >第二个分段导航,则需要在返回第一个分段时恢复listview状态。而且我不想再次从网上下载永久存在,只是去保存listview的位置。 – TpoM6oH

+0

然后,您必须从您的Fragment的onAttach()中的web下载数据,并将数据设置为listview。看起来你正在调用onCreateView()中的webservice,这是多次调用的原因。 – TNR

+0

但是我怎样才能得到onAttach方法中的listView? – TpoM6oH