我目前正在使用蓝牙连接创建应用。连接在一个简单对象(HandleConnection)内处理。建立连接后,我的应用程序进入“远程”模式,这意味着我正在用另一个(RemoteFragment)替换我的主片段,它使用“HandleConnection”对象。
直到一切顺利,因为在我的“onCreate”结束时(在我的活动中)我设置了RemoteFragment的handleConnection属性:
{{1}}
除非我转变为横向模式,否则一切正常。 然后(在调试模式下播放后),我的RemoteFragment似乎在我的setter被调用后重新创建,这显然意味着我的handleConnection属性为null。 它为什么这样做?我会理解,如果我没有重复使用前一个片段(那么我会在彼此的顶部有两个不同的片段),但在这种情况下它没有意义。 我通过调用onCreateView中的回调函数来获取HandleConnection对象,但是为什么在我之前调用setter时该属性为null?
谢谢!
答案 0 :(得分:0)
片段的生命周期直接受宿主活动生命周期的影响。当活动被破坏时,所有碎片都被破坏。在布局更改期间,将销毁并重新创建活动。
在这种情况下,轮换后,else
方法中的onCreate()
条件将会执行,因此会执行您的行为。请查看文档以获得全面的理解。
http://developer.android.com/guide/components/fragments.html
答案 1 :(得分:0)
您需要在AndroidManifes.xml中添加您的活动注册:<activity android:configChanges="orientation|screenSize"/>
阅读this文章
答案 2 :(得分:0)
显然我的问题是我没有使用我的RemoteFragment的正确实例,这意味着我当前的引用(在我的活动中)具有我的对象的正确的非null值,但显示的片段不是这个一个(它是旧的,它被重新创建,因此handleConnection的值为null)。