データベースへの変更を通知する必要があるいくつかのフラグメントを含むFragmentPagerAdapterを使用します。私は、コールバックインターフェイスを実装するフラグメントを繰り返し処理し、refreshData()メソッドを呼び出すことによってこれを行います。FragmentPagerAdapter - オリエンテーションの変更を処理する方法は?
これは、デバイスの向きが変わるまでうまく動作します。向きが変更された後、メソッド呼び出しが機能しているように見えるにもかかわらず、フラグメントUIが目に見えるように更新されません。
これまでに私が読んだことは、FragmentPagerAdapterがフラグメントのライフサイクルを処理し、コールバックを受け取るフラグメントが実際に表示されるものではないためです。
private class DataPagerAdapter extends FragmentPagerAdapter {
private DataFragment[] fragments = new DataFragment[] {
new FooDataFragment(), BarDataFragment()};
public DataPagerAdapter(android.support.v4.app.FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return fragments.length;
}
public DataFragment[] getFragments() {
return fragments;
}
}
protected void refreshData() {
for (DataFragment dataFragment : mPagerAdapter.getFragments()) {
dataFragment.refreshData();
}
この問題は、各フラグメント内にブロードキャスト受信機を使用して一時的に修正されましたが、この解決策は無駄であり、メモリリークを引き起こす可能性があります。これを正しく修正する方法は?私はランドスケープの変更後に新しく作成されたフラグメントを使いたいので、ランドスケープモードで別のレイアウトとロジックを使用します。
マニフェストアンドロイドでウルactivtyタグにこれを追加します。configChanges =「オリエンテーション|画面サイズ| keyboardHidden」(ターゲットAPI 13+) – TheFlash
minSdkVersionがが私 –