フラグメントの問題に関するスタックオーバーフローについて多くのことを読みましたが、問題の解決策が見つかりません。
タブホストがあり、デバイスの回転を変更してから別のタブを選択すると、最初のタブからのビューも表示されます。したがって、両方のタブのコンテンツが重なり合っています。
カスタムのタブリスナーを使用しており、すべてのタブがフラグメントです。これをバイパスすることはできましandroid:configChanges="keyboardHidden|orientation|screenSize"
たが、この解決策は他の問題のリストを提供し、これは悪い解決策であると読みました。
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment fragment;
private final FragmentActivity activity;
private final String tag;
private final Class<T> myClass;
private long id;
public TabListener(FragmentActivity a, String t, Class<T> c, long id) {
tag = t;
myClass = c;
activity = a;
this.id = id;
}
/** The following are each of the ActionBar.TabListener callbacks */
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (fragment == null) {
fragment = Fragment.instantiate(activity, myClass.getName());
// Sends stored TimerClass id to fragment
if(id != 0) {
Bundle b = new Bundle();
b.putLong("id", id);
fragment.setArguments(b);
}
ft.add(android.R.id.content, fragment, tag);
} else { // If it exists, simply attach it in order to show it
ft.attach(fragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (fragment != null)
ft.detach(fragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
editNameDialog();
}
}
これをフラグメント、アクティビティ、または TabListener で処理する必要があるかどうかはわかりません。画面の向きを変更するまで、タブのコンテンツは正しく表示されます。