@prokopov-vi

Как исправить ошибку при пересоздании ViewStub?

Layout должен создаваться на активити по нажатию на кнопку, для этого использую ViewStub! Суть такова: при нажатии кнопки проверяю существует ли ViewStub, если нет - его создаю и вывожу на экран, если он есть - его нужно убрать!

ViewStub viewStub = null;
View v;
public void onClick(View view) {
if (viewStub == null){
    viewStub = (ViewStub) finalView.findViewById(R.id.space);
      v = viewStub.inflate();
}else if (viewStub != null){
      v.setVisibility(View.GONE);
       viewStub = null;
}
}


Все работает, когда первый раз нажимаю layout отображается, при втором нажатии он скрывается!

Но при третьем нажатии на кнопку он должен распознаваться, как не существующий и заново создаваться,
но этого не происходить и выбрасывает ошибку :
FATAL EXCEPTION: main java.lang.NullPointerException at com.vitaliy.useexpandablelistview.MainActivity$ListAdapter$1.onClick(MainActivity.java:167)


Вроде все понятно, что у меня viewStub = null, но не понятно почему так происходит, ведь я ,когда его не существует - создаю его заново !!! ???

Помогите решить проблему !
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
После того, как вы вызвали inflate () у ViewStub, он перестал быть частью иерархии вью, то есть вы второй раз не можете найти его с помощью finalView.findViewById(R.id.space).
Зато ваша View уже создана, она уже в иерархии, только она невидима(вы её скрыли v.setVisibility(View.GONE)).
Таким образом, всё, что вам надо сделать - в самом начале onClick() проверить v != null, и в этом случае сделать её видимой: v.setVisibility(View.VISIBLE);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы