我正在使用蓝牙连接创建应用程序。连接在一个简单对象(HandleConnection)内处理。当连接建立时,我的应用程序进入“远程”模式,这意味着我将使用“HandleConnection”对象的另一个(RemoteFragment)替换我的主片段。配置更改后重置片段
直到一切都在我的“的onCreate”(我的活动内)结束的很顺利,因为我设置了RemoteFragment的的handleConnection属性:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
if (savedInstanceState == null) {
retainedFragment = new RetainedFragment();
getFragmentManager().beginTransaction().add(retainedFragment, RetainedFragment.class.toString()).commit();
handleConnection = new HandleConnection(this, handler);
retainedFragment.setHandleConnection(handleConnection);
} else {
remoteFragment = (RemoteFragment) getFragmentManager().findFragmentByTag(RemoteFragment.class.toString());
retainedFragment = (RetainedFragment) getFragmentManager().findFragmentByTag(RetainedFragment.class.toString());
if (remoteFragment == null)
remoteFragment = new RemoteFragment();
handleConnection = retainedFragment.getHandleConnection();
remoteFragment.setHandleConnection(handleConnection);
}
fragmentTransaction.commit();
}
一切正常,除非我变成横向模式的罚款。 然后(在调试模式下播放后),看起来我的调用器被调用后重新创建了RemoteFragment,这显然意味着我的handleConnection属性为null。 它为什么这样做?我会理解,如果我没有重用前一个片段(那么我会有两个不同的片段在另一个之上),但在这种情况下,它是没有意义的。 我通过调用onCreateView中的回调函数来获得HandleConnection对象,但是为什么当我之前调用setter时该属性为null?
谢谢!
是的,但因为我调用''''remoteFragment.setHandleConnection(handleConnection);''''进入onCreateView时,remoteFragment不应该有空指针? – pLesur
在你的其他情况下,当你调用'handleConnection = retainedFragment.getHandleConnection();'这个句柄连接null?我想这是空的。在将其设置为'remoteFragment'之前,您应该有一个可空性检查。 – Sabeeh
不,handleConnection不为空。我一直在使用Android doc中提到的RetainedFragment模式:[link](http://developer.android.com/guide/topics/resources/runtime-changes.html) – pLesur