何らかの理由でフラグメント ビュー全体を変更する場合 (たとえば、成功時にビューを変更する非同期 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()
.
ViewModel
今日では、その目的で使用することをお勧めします。