フラグメント ビューが適切に更新されないという奇妙な問題が発生していますが、アプリを閉じてしばらくしてから再度開いた後にのみ発生します。
をTabSwitcherActivity
含む がありViewPager
ます。はViewPager
3 つのフラグメントを切り替え、各フラグメントは同じ情報の異なるビューを表します。情報が古くなる特定のイベントが発生する可能性があるため、フラグメントに通知してビューを更新する必要があります。これを実現するために、3 つのフラグメントを反復処理して更新するように指示するTabSwitcherActivity
メソッドが呼び出されます。notifyDataSetChanged()
これが(私が思うに)最も関連性の高いコードです:
public class TabSwitcherActivity extends FragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Used to keep track of the child fragments of this activity so we can update their list adapters.
mFragments = new ArrayList<Fragment>();
// Set up the view pager and tab adapter.
setContentView(R.layout.pager_layout);
mViewPager = (ViewPager) super.findViewById(R.id.pager);
mFragments.add(Fragment.instantiate(this, FragmentOne.class.getName()));
mFragments.add(Fragment.instantiate(this, FragmentTwo.class.getName()));
mFragments.add(Fragment.instantiate(this, FragmentThree.class.getName()));
mViewPager.setAdapter(new ListPagerAdapter(super.getSupportFragmentManager(), mFragments));
}
public void notifyDataSetChanged() {
for (Fragment fragment : mFragments) {
if (fragment instanceof IDataSetChangedListener) {
((IDataSetChangedListener) fragment).notifyDataSetChanged();
}
}
}
}
これで、アプリを初めて起動したときに意図したとおりに機能します。問題は、アプリを閉じてしばらくしてから再度開いた後、TabSwitcherActivity.notifyDataSetChanged()
アプリの実行中に呼び出してもフラグメント ビューが更新されないことです (これは、再起動後に初めてアプリを起動したときに機能します)。これは、私が正しく処理していないフラグメントにライフサイクルの状況があると信じるように導きます。これは何だろう?フラグメントが破棄されて再作成された場合、それらはおそらくmFragments
アレイに正しく格納されていないことがわかりました。