2013-02-23 2 views
15

Я пытаюсь поговорить с фрагментом из активности, но я не уверен, что фрагмент виден или нет. Если фрагмент не существует, я даже не могу выполнить нулевую проверку, поскольку он вызывает исключение из-за кастинга.Как проверить, существует ли фрагмент?

Как проверить, существует ли фрагмент?

PlayerFragment = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container); 
playerFragment.onNotificationListener.updateUI(); 
+0

Не можете ли вы сделать нулевую проверку и только после этого сделать кастинг? –

+0

Я пробовал. После литья объект не содержит необходимых элементов. –

+0

добавить этот фреймворк в xml-файл вашей деятельности – twocity

ответ

26

Не бросайте его сначала.

Fragment f = mManager.findFragmentById(R.id.bottom_container); 
if(f != null && f instanceof PlayerFragment) { 
    PlayerFragment playerFragment = (PlayerFragment) f; 
    playerFragment.onNotificationListener.updateUI(); 
} 

Если это не работает, запустите stacktrace за исключением, которую вы получаете.

+0

Работал для меня отлично .. спасибо .. !! – OAEI

10

Литье null в ссылку не будет вызывать исключение, для примитива это будет.

findFragmentById() Использование или findFragmentByTag() получить ссылку и проверить, если его нуль, если нет, то проверьте ссылки или isAdded()isVisible().

PlayerFragment p = (PlayerFragment) mManager.findFragmentById(R.id.bottom_container); 
if(p != null && p.isAdded()){ 
    p.onNotificationListener.updateUI(); 
} 
+0

хорошая точка о 'casting null' –

Смежные вопросы