我正在尝试与活动中的片段进行对话,但我不确定片段是否可见。如果片段不存在,我甚至不能进行空检查,因为它会因为强制转换而抛出异常。
如何检查片段是否存在?
PlayerFragment = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container);
playerFragment.onNotificationListener.updateUI();
答案 0 :(得分:29)
首先不要施放它。
Fragment f = mManager.findFragmentById(R.id.bottom_container);
if(f != null && f instanceof PlayerFragment) {
PlayerFragment playerFragment = (PlayerFragment) f;
playerFragment.onNotificationListener.updateUI();
}
如果在使用您收到的异常的堆栈跟踪之后不起作用,则无效。
答案 1 :(得分:11)
将null
转换为引用不会将异常抛出到原语,它会。
使用findFragmentById()
或findFragmentByTag()
获取引用并检查其是否为null,如果不是,请检查引用的isAdded()
或isVisible()
。
PlayerFragment p = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container);
if( p != null && p.isAdded()){
p.onNotificationListener.updateUI();
}