我正在使用标签创建片段活动。现在每当我选择一个标签时,相应的片段都会被重新创建并且
onCreateView()
调用方法。 但我想要的是重用片段的视图,以便每当选择一个标签时系统不会调用
onCreateView()
片段的代替它显示片段的先前视图(如果存在)。 请尽快回复。
答案 0 :(得分:1)
您可能希望显示和隐藏片段,而不是在选择标签时添加和删除它们。
例如:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (frag.isAdded()) {
transaction.show(R.id.layout, frag);
} else {
transaction.add(R.id.layout, frag);
}
transaction.commit();
答案 1 :(得分:1)
setOffScreenPageLimit()方法可用于设置要保持活动的片段数,即使用户看不到它们也是如此。
答案 2 :(得分:0)
试试这个,它适用于屏幕旋转,也适用于你的情况:
1)首次添加片段时,请使用名称参数创建它:
getSupportFragmentManager()
.beginTransaction()
.replace(<containerID>, <fragment>, YOUR_FRAGMENT_NAME_CONST)
.commit();
2)当你需要找到它时:
YourFragmentType fragment;
fragment = (YourFragmentType) getSupportFragmentManager()
.findFragmentByTag(YOUR_FRAGMENT_NAME_CONST);
if (fragment != null){
//TODO set data to the existing fragment
}
else{
//TODO create and initialize your fragment
}
修改强>:
您应该区分片段对象创建和 onCreateView()被调用。
你应该避免不必要的对象创建,以及重用片段。
另一方面(就我的经验而言)最好坚持 Android的onCreateView()政治,以保证一致的用户体验。
如果你真的想节省CPU时间并避免重新膨胀复杂的视图(并解决所有问题) - 你可能只是检查它是否为空:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// View
if (mView == null) {
mView = inflater.inflate(R.layout.your_fragment, container, false);
...
}
...
}