2013-04-26 55 views
0

我有一个应用程序。那就是使用Fragments。主要活动以2个片段开始。其中一个片段中包含用于在运行时添加一个3'rd片段像这样的按钮:保留在运行时添加的片段

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Activity activity = getActivity(); 

      if (fragment3 == null) { 
       getFragmentManager() 
       .beginTransaction() 
       .add(R.id.fragment_content3, new ThirdFragment()) 
       .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
       .commit(); 
     } 

的ThirdFragment类看起来是这样的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.v(getTag(), "FRAG onCreate CALLED!"); 
    this.setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View view = inflater.inflate(R.layout.third_fragment, container, false); 
return view; 

的问题是,我无法理解如何在重新创建Activity时保持该片段的视图不被删除。我试图@Override onCreate()方法并使用setRetainInstance(true)无济于事。

所以,我的问题是:

什么是正确的做法,以保持一个动态的(在运行时)从当活动被重新被删除添加片段?

回答

0

在这种情况下,可以确保通过实施额外的回调方法,可以让您保存您的活动状态的信息保留有关的活动状态是重要的信息:onSaveInstanceState()

系统在使活动易受破坏之前调用onSaveInstanceState()。系统将此方法传递给一个Bundle,您可以在其中使用诸如putString()和putInt()之类的方法将关于该活动的状态信息保存为名称 - 值对。然后,如果系统杀死您的申请流程,并且用户返回您的活动,系统会重新创建活动并将套件传递给onCreate()onRestoreInstanceState()。使用这些方法中的任何一种,都可以从Bundle中提取已保存的状态并恢复活动状态。如果没有要恢复的状态信息,则传递给您的Bundle为null(这是第一次创建活动时的情况)。 Android Documentation

解决方案:

所以,你只有内部方法onSaveInstanceState()捆绑,以保持你的片段信息,并作为片段是一个复杂的对象,你不能直接存储束的内侧。

我的建议是@覆盖onSaveInstanceState()并使用boolean标志来指示您的第三个片段是否应该连接(可见)。很快,您可以使用OnCreate() or onRestoreInstanceState()并获取包来读取您的标志,并根据它,您可以创建或不创建您的片段。