Fragments
に問題があり、方向が変更されています。オリエンテーション変更後にフラグメントが正しく機能しない
MainActivity
のアプリケーションでは、タブ付きアクションバーを使用してFragments
の切り替えを処理しています。ここには、タブ付きアクションバーのコードとタブが選択されたときのコードがあります。
private class MyTabListener <T extends android.support.v4.app.Fragment> implements ActionBar.TabListener {
private android.support.v4.app.Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public MyTabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
@Override
public void onTabSelected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
if (mFragment == null){ // check to see if the fragment has already been initialised. If not create a new one.
mFragment = android.support.v4.app.Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content,mFragment,mTag);
} else {
ft.attach(mFragment); // if the fragment has been initialised attach it to the current activity
}
}
@Override
public void onTabUnselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
if (mFragment != null){
ft.detach(mFragment); // when a fragment is no longer needed, detach it from the activity but dont destroy it
}
}
@Override
public void onTabReselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
私が見る方法は、アプリケーションがポートレートモードで最初に読み込まれたときにすべて正常に動作することです。回転すると、何らかの理由でFragment1
という別のインスタンスが追加され、別のタブが選択されたときに切り離されません。これは、私が肖像画に戻って回転する場合にも当てはまります。
私はFragments
にsetRetainInstance(true);
を使用しようとしましたが、これは機能しません。
回転する前に私がFragments
で何かを上書きするか、何かする必要がある方法はありますか?
ありがとうございます。
EDITこれで、アクティビティの再作成時にonTabSelectedが再度呼び出されることがわかりました。これがフラグメントが複数回接続されている私の問題の原因かもしれませんか?
ここに私の活動onCreateメソッドがあります。
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
//setContentView(R.layout.main);
}
// Create the Action Bar with tabs
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
//create the tab for track and add it to the action bar.
Tab tab = actionBar.newTab()
.setText("Track")
.setTabListener(new MyTabListener<TrackingFragment>(this,"track",TrackingFragment.class));
actionBar.addTab(tab);
//create the tab for ski tracks and add it to the action bar.
tab = actionBar.newTab()
.setText("Something Tracks")
.setTabListener(new MyTabListener<TrackListFragment>(this,"somethingtracks",TrackListFragment.class));
actionBar.addTab(tab);
//create the tab for photos and add it to the action bar.
tab = actionBar.newTab()
.setText("Photos")
.setTabListener(new MyTabListener<PhotoFragment>(this,"photos",PhotoFragment.class));
actionBar.addTab(tab);
私は、アクションのバーコードをonCreateメソッドに配置すると、方向変更後にアクティビティが再作成されたときに作成または表示されません。私は今supportManagerの部分を試してみる – StuStirling
+1 ...私が編集している間に正しい答えでそこに忍び寄る。 :) – Barak
は、setTabListenerを呼び出すときに渡されないフラグメントですか? – StuStirling