エピデミアンの回答からの情報を使用して、アプリにタブを作成しています
タブを処理するメイン クラス、このクラスextends TabActivity
を作成し、タブを作成します。
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, stackA.class);
spec = tabHost.newTabSpec("tab1").setIndicator("Tab 1",
res.getDrawable(android.R.drawable.ic_menu_search))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, stackB.class);
spec = tabHost.newTabSpec("tab2").setIndicator("Tab 2",
res.getDrawable(android.R.drawable.ic_menu_search))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
次に、すべてのタブに対して FragmentActivity が作成され、これにより、すべてのタブでスタックを作成できるようになります。私のフラグメントが作成されます:
protected void navigateTo(Fragment newFragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content, newFragment);
ft.addToBackStack(null);
ft.commit();
}
public class fragmentA extends Fragment{
private LinearLayout ll;
private FragmentActivity fa;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fa = super.getActivity();
ll = (LinearLayout) inflater.inflate(R.layout.fragmenta, container, false);
Button next = (Button) ll.findViewById(R.id.button1);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
((ActivityInTab) getActivity()).navigateTo(new fragmentB());
}
});
return ll;
}
}
これは機能しています。タブ1とフラグメントB(スタックの最初のフラグメントはA)にいるときに、デバイスを回転させてからフラグメントAに戻るのは何が悪いのですか.
エピデミアンは向きとsetArguments / getArgumentsの使用について何か言ったが、私はAndroidプログラミングに慣れていないので、それを行う方法が本当にわからない:
最後に、方向の変化に耐える必要がある場合は、setArguments/getArguments を使用してフラグメントを作成することが重要です。フラグメントのコンストラクターにインスタンス変数を設定すると、めちゃくちゃになります。しかし幸いなことに、これは非常に簡単に修正できます。コンストラクターの setArguments にすべてを保存し、onCreate の getArguments でそれらを取得して使用するだけです。