Просмотр повторного использования во фрагментах Android - PullRequest
8 голосов
/ 27 марта 2011

Я пытаюсь сохранить мои состояния просмотра в моем фрагменте, но меня беспокоит, что я пропускаю свою активность. Вот что я делаю:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){
   if(mView != null){
      View oldParent = mView.getParent();
      if(oldParent != container){
         ((ViewGroup)oldParent).removeView(mView);
      }
      return mView;
   }
   else{
      mView = inflater.inflate(R.id.fragview, null)
      return mView;
   }
}

Я обеспокоен, потому что я знаю, что все представления держатся за контекст, и я не знаю, является ли это контекстом деятельности или контекстом приложения, если он надувается инфлятором. Возможно, было бы лучше прагматично создать представление и установить его атрибуты, используя getActivity (). GetApplication (), а не использовать инфлятор. Буду признателен за любые отзывы по этому поводу.

Спасибо!

РЕДАКТИРОВАТЬ: Подтвержденная утечка активности, хотя этот код прекрасно работает, не делайте этого: * (

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Я пытаюсь сохранить мои состояния просмотра в моем фрагменте, но меня беспокоит, что я пропускаю свою активность.

Используйте onSaveInstanceState() (во фрагменте) и onRetainConfigurationInstance() (в упражнении) для поддержки «Просмотр состояний» при изменениях конфигурации.Я не совсем уверен, о каких других «состояниях просмотра» вы могли ссылаться.

Я обеспокоен тем, что знаю, что все представления держатся за контекст, и я не знаю, является ли он контекстом действия.или Контекст приложения, если он накачан из инфлятора.

Поскольку использование Application для просмотра инфляции, похоже, не работает должным образом, вы должны надувать инфу из Activity.И, следовательно, представления будут содержать ссылку на активность, которая их раздула.

1 голос
/ 09 ноября 2011

@ schwiz é реализовали нечто подобное.

Я использую setRetainInstance во фрагменте. на макете фрагмента у меня есть местозаполнитель FrameLayout, куда я помещаю свой webView внутри.

Этот веб-вид создается программно в onCreate фрагмента с использованием контекста приложения, и я делаю addView(webView) на раздувном макете в onCreateView().

webView = new WebView(getActivity().getApplicationContext());

А в onDestroyView я просто удаляю webView из моего заполнителя структуры кадра.

Это работает очень хорошо, если вы не пытаетесь воспроизвести видео в полноэкранном режиме. Это не работает, потому что он ожидает контекст деятельности

0 голосов
/ 15 августа 2012

Я пытаюсь сохранить мои состояния просмотра в моем фрагменте

Чтобы сохранить и сохранить состояние просмотра, вы можете просто использовать View.onSaveInstanceState () и View.onRestoreInstanceState (Parcelable state)

Это поможет вам обрабатывать сохранение и восстановление состояния просмотра независимо от активности или фрагмента.См. Этот ответ для получения дополнительной информации об этом ( как предотвратить потерю состояния пользовательских видов при изменении ориентации экрана )

...