yyd*_*ydl 111 android android-fragments
在针对FragmentTransaction的Android文档中,我注意到两种非常相似的方法:detach和remove.那里的描述似乎没有提供关于何时使用每个的详细信息,并且从我可以看出它们看起来是相同的.
那么:这两种方法有什么区别?
Raj*_*Dua 151
detach方法从UI中删除片段,但其状态由片段管理器维护.这意味着您可以通过使用修改后的ViewHierarchy调用attach方法来重用此片段
删除意味着无法重新附加片段实例.您将不得不再次将其添加到片段事务中.
来源评论
您会注意到,当分离片段时,仅调用onPause,onStop和onDestroyView方法(按此顺序).另一方面,当删除片段时,将调用其onPause,onStop,onDestroyView,onDestroy和onDetach方法(按此顺序).类似地,在附加时,Fragment的onCreateView,onStart和onResume方法仅被调用; 添加时,会调用Fragment的onAttach,onCreate,onCreateView,onStart和onResume方法(按此顺序). - 阿迪尔·侯赛因
Ste*_*hen 52
即使根据留言板上的Google工程师,片段管理方法的命名也非常混乱(参见上面的评论).我做了一个小小的演示来弄清楚事情是如何运作的.以下是我的发现.如果我错了,请随意纠正我.
要最初向活动添加片段,请使用:getFragmentManager().beginTransaction().add(R.id.container,mFragment).commit().
这将活动与片段相关联,并将视图与片段相关联.
以下是生成的生命周期事件和其他重要方法返回值:
onAttach()           
onCreate()           
onCreateView()       
onViewCreated()      
onActivityCreated()  
onViewStateRestored()
onStart()            
onResume()
mFragment.getView() == null: false                    
mFragment.getActivity() == null: false
要从活动中删除片段,请使用:getFragmentManager().beginTransaction().remove(mFragment).commit().
这将删除与View或Activity的任何关联.
以下是生成的生命周期事件和其他重要方法返回值:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
我在这里重新添加了片段
要从活动中分离添加的片段,请使用:getFragmentManager().beginTransaction().detach(mFragment).commit().
这将删除与View的任何关联,但保持与Activity的关联.
以下是生成的生命周期事件和其他重要方法返回值:
onPause()                             
onStop()                              
onDestroyView()                      
mFragment.getView() == null: true
mFragment.getActivity() == null: false
要重新附加分离到Activity的Fragment,可以使用:getFragmentManager().beginTransaction().attach(mFragment).commit().
这将创建一个与Fragment关联的新视图并维护Activity关联.
以下是生成的生命周期事件和其他重要方法返回值:
onCreateView()                        
onViewCreated()                       
onActivityCreated()                   
onViewStateRestored()                 
onStart()                             
onResume()                            
mFragment.getView() == null: false
mFragment.getActivity() == null: false
其他需要注意的重要事项:如果您分离Fragment然后尝试使用add()而不是attach()再次添加它,则似乎没有任何变化.
如果您尝试使用attach()而不是add()添加使用remove()删除的Fragment,则似乎没有任何更改.
当getView()返回null时,Fragment可能仍然具有对它创建的最后一个View的内部引用.此视图不再有效,不应使用.
| 归档时间: | 
 | 
| 查看次数: | 50280 次 | 
| 最近记录: |