2016-05-10 3 views
-1

Я использую этот пример, чтобы создать простое приложение, это сделано Joshep Raco (JoeRock11)Xamarin фрагменты андроида ViewPager не получает обновилась

https://github.com/JoeRock11/Xamarin_DesignLibrary

У меня есть проблема, я работал с этим образцом чтобы создать приложение с вкладками, и я обнаружил странное поведение, когда приложение запускает только загрузки фрагмента1 и фрагмента2, но не фрагмент3 (когда я говорю «загрузка», я имею в виду, что их метод oncreate и oncreateview запускается). Чтобы загрузить фрагмент 3, я должен явно указать его, я думал, что все фрагменты будут загружаться, но это не так, не знаю, почему, я хотел бы знать, почему это происходит.

Кроме того, и это моя основная проблема, и я не знаю, как это исправить, каждый раз, когда я нажимаю вкладку фрагмента, я хочу, чтобы этот фрагмент был загружен, теперь кажется, что он просто показывает экземпляр, созданный в памяти, потому что он doens't triger какой-либо метод фрагмента, мне нужно загрузить его снова, потому что мне нужно обновить его данные, теперь он только перезагружается случайно. Можете ли вы или кто-нибудь помочь мне решить это, пожалуйста?

Большое спасибо. pd: извините за мой английский, это не мой родной язык.

+0

можно ли получить код или жизнеспособный воспроизводимый пример? – svarog

ответ

0

Я считаю, что это контролируется Off Screen Page Limit на контроле ViewPager. Это значение по умолчанию равно 1, что в основном означает, что количество страниц, которое должно загружаться ViewPager, равно 2, отображаемой в данный момент странице и одно выкл.

Это значение легко регулируется с использованием свойства OffscreenPageLimit на ViewPager. http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)


Если вы хотите, чтобы все Fragments перезагружать данные, когда они скользят по экрану, вы можете переопределить UserVisibleHint на каждом Fragment, а затем проверить, чтобы увидеть, если Fragment виден и выполнить код для перезагрузки данных для этого фрагмента:

public override bool UserVisibleHint { 
    get { 
      return base.UserVisibleHint; 
     } 
    set { 
      base.UserVisibleHint = value; 
      if (value) { 
      //Fragment is visible, reload data 
      } 
    } 
} 

http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)


Описан новый подход к обновлению фрагментов ViewPager: Update ViewPager dynamically?

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