3

エピデミアンの回答からの情報を使用して、アプリにタブを作成しています

タブを処理するメイン クラス、このクラス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 でそれらを取得して使用するだけです。

4

3 に答える 3

6
int x;

Bundle args = new Bundle();

args.putString("variable", x);

FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction ft = fragmentManager.beginTransaction();

Fragment fragment = Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);

ft.replace(R.id.layout1, fragment);

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

ft.addToBackStack(null);

ft.commit();

フラグメントよりも:

getArguments().getInt("variable");
于 2012-04-16T17:56:47.353 に答える
-3

Activity姿勢変化による の破壊を防ぐことができます。TabActivity次の行を(向きの変更 + キーボードの表示の変更)のマニフェストに追加します。

android:configChanges="keyboardHidden|orientation"

説明はこちらをご覧ください

ここでは setArguments/getArguments は役に立ちません。彼が述べたように、インスタンス変数を保存し、向きの変更後にそれらを取得するために使用できます。ただし、上記の特定の行では、アクティビティ/フラグメントが破棄されないため、それは必要ありません

于 2012-04-16T10:50:26.457 に答える