1

私はそれに1つと3つのクラスをFragmentActivity持っています。ボタン 1 をクリックすると、 、 を表示および非表示にしたい。と がクリックされた場合、 を表示および非表示にしたい、またはその逆。私のコードは機能しませんでした。ButtonsFragmentFragmentOneFragmentTwoFragmentThreeButton2FragmentTwoFragmentOneFragmentThree

    private void fManager() {

    FragmentManager manager = getSupportFragmentManager();

    f1 = manager.findFragmentById(R.id.first);
    f2 = manager.findFragmentById(R.id.second);
    f2 = manager.findFragmentById(R.id.third);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button1:
        if (b1.isPressed()) {
            FragmentTransaction transaction = getSupportFragmentManager()
                    .beginTransaction();
            transaction.hide(f2);
            transaction.hide(f3);
            transaction.show(f1);
                            transaction.commit();
        }
        break;
    case R.id.button2:
        if (b2.isPressed()) {
            FragmentTransaction transaction = getSupportFragmentManager()
                    .beginTransaction();
            transaction.hide(f1);
            transaction.hide(f3);
            transaction.show(f2);
                            transaction.commit();
        }
        break;
    case R.id.button3:
        if (b3.isPressed()) {
            FragmentTransaction transaction = getSupportFragmentManager()
                    .beginTransaction();
            transaction.hide(f1);
            transaction.hide(f2);
            transaction.show(f3);
                         transaction.commit();
        }
        break;
    }

}

ここに画像の説明を入力

4

2 に答える 2

1

単なるタイプミスですか、それとも同じ var 名を使用して 2 つのオブジェクトを参照していますか?

f2 = manager.findFragmentById(R.id.second);
f2 = manager.findFragmentById(R.id.third);

trasaction についてさらに詳しい情報が必要な場合は、こちらの私のブログをご覧ください。

于 2013-04-08T14:36:05.717 に答える
1

あなたはcommitあなたの取引に必要です:

transaction.commit();

また、show()andhide()はコンテナーに追加されたフラグメント ( ie など) に対してのみ機能することに注意してください。そのFrameLayoutため、フラグメントを XML で直接定義した場合、試した方法でそれを行うことができない場合があります。setVisibility()また、コンテナを使用する場合は、そこでフラグメントを処理する代わりに、それらに対して通常の操作を行うだけで、結果はまったく同じになります。

于 2013-04-07T17:42:12.110 に答える