【发布时间】:2015-11-08 09:01:53
【问题描述】:
我想了解Android中Activity生命周期和Fragment生命周期的交互,所以决定新建一个项目,从this page复制代码。
然后我认为,为了提高我的理解力,在平板电脑上测试它,切换它的方向并看看它会发生什么(尽管它可能不是为此而设计的)会很有用。
通过 logcat,我跟踪了在活动和国家片段上触发的主要事件,例如在 Activity Oncreate 我写的:
Log.d("TAG", "Activity: 1.onCreate");
这是我从纵向视图开始然后旋转时得到的:
标签:活动:1.onCreate
标签: 活动: 2.onStart
标签:## ContryFrag:1.onAttach
标签:## ContryFrag:2.onCreateView
标签:## ContryFrag:3.onStart
标签: 活动: 3.onResume
标签:## ContryFrag:4.onResume
标签:活动:-3.onPause
标签:## ContryFrag:-4.onPause
标签:活动:-2.onStop
标签:## ContryFrag:-3.onStop
标签:活动:-1.onDestroy
标签:## ContryFrag:-2.onDestroyView
标签:## ContryFrag:-1.onDetach
标签:活动:1.onCreate
标签:## ContryFrag:1.onAttach
标签:## ContryFrag:1.onAttach
标签:## ContryFrag:2.onCreateView
标签: 活动: 2.onStart
标签:## ContryFrag:2.onCreateView
标签:## ContryFrag:3.onStart
标签:## ContryFrag:3.onStart
标签: 活动: 3.onResume
标签:## ContryFrag:4.onResume
标签:## ContryFrag:4.onResume
似乎在纵向视图中通过 FragmentManager 添加的片段在旋转后仍会重新创建,尽管它之前已分离。重新开始的事件链会被再次跟踪,即使它不会显示。
你能帮我理解这里发生了什么吗?
编辑
当我检查片段是否 isInLayout()
Log.d("TAG", "## ContryFrag: 1.onAttach /" + isInLayout() );
我意识到旋转后有两个片段:一个是通过旋转创建的,另一个似乎是先前活动的剩余部分(不应该是)。
标签:活动:1.onCreate
标签:## ContryFrag:1.onAttach /false
标签:## ContryFrag:1.onAttach /true
标签:## ContryFrag:2.onCreateView /true
标签: 活动: 2.onStart
标签:## ContryFrag:2.onCreateView /false
标签:## ContryFrag:3.onStart /false
标签:## ContryFrag:3.onStart /true
标签: 活动: 3.onResume
标签:## ContryFrag:4.onResume /false
标签:## ContryFrag:4.onResume /true
编辑 2
这是我用来获取onSelectedCountry(String country)的虚拟代码,没有提供:
public void onSelectedCountry(String country)
{
String[] x = {country, "city0", "city1", "city2", "city3", "city4", "city5"};
adapter.clear();
adapter.addAll(x);
}
编辑 3
这里是my code。抱歉耽搁了,我是第一次使用github。
【问题讨论】:
-
可能是因为你的日志。在您的
City fragment中查看。在landscape模式下,我认为city片段和country片段记录相同的内容。 -
你的意思是说发送消息给logcat的代码可能也被City Fragment调用了?不,我只在主要活动和国家/地区片段中添加了代码。
-
为方便起见,最好在帖子中发布一些代码。发布的链接未显示所有代码。例如,是否有 Activity.onStart() 的代码?
-
唯一缺少的代码是提供国家和城市列表的代码。所以我实现了我的虚拟 getCountries() 和 getCitiesByCountry(country) 函数。除此之外,所有代码都显示在该页面中,并且该应用程序运行良好。只有彻底调试它,你才会发现我注意到了什么。
-
您尚未发布任何代码来显示您如何创建片段。仅仅显示日志语句的输出是不够的。你的问题到底是什么?是“为什么要添加多个片段”吗?如果是这样,请显示您创建片段的代码。
标签: android android-fragments android-lifecycle