如何在Android中重用片段的视图?

时间:2014-07-31 05:20:18

标签: android android-fragments

我正在使用标签创建片段活动。现在每当我选择一个标签时,相应的片段都会被重新创建并且

onCreateView()
调用

方法。 但我想要的是重用片段的视图,以便每当选择一个标签时系统不会调用

onCreateView()
片段的

代替它显示片段的先前视图(如果存在)。 请尽快回复。

3 个答案:

答案 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);
            ...
        }    
...
    }