Если по какой-либо причине вы хотите изменить представление всего фрагмента (например, асинхронный запрос URL, который изменит представление в случае успеха), вы можете использовать FragmentTransaction в родительском действии и создать новый фрагмент на лету .
Или вы можете оставить фрагмент и вызвать метод этого фрагмента, который обновится сам.
Пример:
В родительском упражнении я строю и сохраняю список фрагментов List<RefreshFragment> mFragmentList
.
Вот класс RefreshFragment (и все мои фрагменты расширяют этот в моем примере):
public class RefreshFragment extends Fragment {
protected Data data; // here your asynchronously loaded data
public void setData(Data data) {
this.data = data;
// The reload fragment code here !
if (! this.isDetached()) {
getFragmentManager().beginTransaction()
.detach(this)
.attach(this)
.commit();
}
}
}
Тогда в моей деятельности асинхронный обратный вызов я могу назвать:
for (RefreshFragment f : mFragmentList) f.setData(data);
Таким образом, каждый фрагмент будет обновлен с правильными данными, и присоединенный в данный момент фрагмент будет обновлен немедленно. Вы должны предоставить свой собственный onCreateView во фрагментах, конечно.
Важно то, что фрагмент может перезагрузить себя с помощью getFragmentManager()
.