Что бы я сделал, чтобы каждый ListFragment
использовал Loader
для загрузки своих данных.Затем вместо того, чтобы наблюдатель уведомил Fragment
(который мог быть убит), чтобы обновить свои данные, зарегистрируйте наблюдателя для каждого Loader
, чтобы он знал, когда источник данных изменился, и будет повторно запрашивать, когдаодин был обнаружен.(Если ваш источник данных - база данных SQLite, и вы используете ContentProvider
, CursorLoader
сделает все это за вас).
Это реализация, которую я рекомендовал бы, потому что
Каждое поведение Fragment
остается автономным (т. Е. Каждый является повторно используемым компонентом, который не привязан к какому-либо конкретному ViewPager
или Activity
).
Это позволяет избежать сложностей, связанных с необходимостью иметь дело с потенциально уничтоженными Fragment
s в пределах ваших ViewPager
.
Если вам нужно быстрое решение, вы, вероятно, можете сойти с рук.заставляя Fragment
s оставаться в памяти, используя ViewPager#setOffScreenPageLimit(int limit)
, как предлагает Иван ... однако, на мой взгляд, это не так уж чисто от решения.