Android片段意外关闭
问题描述:
我使用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();
这里我使用替换强制第二个片段重新加载时,返回键。
有时从第三个片段返回键可以正常工作,它显示出现时重新加载的第二个片段。
但有时(正如我可以看到它发生在我第一次尝试这些步骤时)从第三个片段回到关键位置,导致我到第一个片段,关闭第二个片段,违背了我的期望。第一个片段正在重新加载。
如何防止这种奇怪的行为?
答
add()方法会将Fragments添加到Container,并且添加到容器的任何其他片段将排队返回到第一个片段。除非第一个片段变为隐形,否则它们将不可见。我希望这是你所面临的问题。如果您也使用replace()进行第一个 - >第二个片段导航,那就太好了。
如果使用replace()进行第一个 - >第二个分段导航,则需要在返回第一个分段时恢复listview状态。而且我不想再次从网上下载永久存在,只是去保存listview的位置。 – TpoM6oH
然后,您必须从您的Fragment的onAttach()中的web下载数据,并将数据设置为listview。看起来你正在调用onCreateView()中的webservice,这是多次调用的原因。 – TNR
但是我怎样才能得到onAttach方法中的listView? – TpoM6oH