2016-09-29 6 views
0

Чтобы вызвать новый фрагмент, в настоящее время я использую .add(R.id.container, fragment) или .replace(R.id.container, fragment).Какие проблемы могут вызвать идентификатор контейнера фрагмента фрагмента

, и я столкнулся с грохотом

java.lang.IllegalArgumentException Нет вид найденного идентификатора

, который был зафиксирован просто заменяющего

.add(R.id.container, fragment) в .add(((ViewGroup)getView().getParent()).getId(), fragment)

Теперь я Я думаю об использовании ((ViewGroup)getView().getParent()).getId() везде, где я могу в своем приложении к av другие аварии.

Это хорошая идея? Какие проблемы могут возникнуть, если я использую этот подход? Это безопасно ? Есть ли лучший подход?

+0

и что такое R? вы используете дочерние фрагменты? ... разве вы не смешивали 'your.package.R' с' android.R'? – Selvin

ответ

1

Лучше подход:

Когда вы собираетесь добавить/заменить фрагмент, Сначала проверьте, является ли нуль или не контейнер

, а затем выполнить операцию.

  FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 

      FrameLayout frame=(FrameLayout)getActivity().findViewById(R.id.reg_frame_container); 

      if(frame!=null) { 
       fragmentManager.beginTransaction().replace(R.id.reg_frame_container, new SecurityQuestions()).commit(); 

      } 
      else { 
       fragmentManager.beginTransaction().replace(R.id.frame_container_menu, new SecurityQuestions()).commit(); 

      } 

ИЛИ

Вы можете использовать свой метод, если он работает правильно, но не забудьте проверить нулевое состояние.

Это работает для меня.

Надеюсь, что это поможет :)

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