1. ホーム
  2. android

[解決済み] アンドロイドでフラグメントを表示・非表示にする

2022-10-01 11:22:11

質問

2つのフラグメントを含むアプリケーションを開発していますが、必要に応じて非表示にしたいです。以下のコードは、私の問題の簡単な例です。 このシンプルなフラグメントアクティビティは、1つのボタンと1つのリストフラグメントを含んでいます。

このシンプルな例は完璧に動作しますが、show hide フラグメントに不満があります。layout.setVisibility(View.GONE); を削除すると、ft.hide(f); ではフラグメントが隠れません。実際、フラグメントを隠しているのではなく、コンテナを隠しているのです。

質問ですが、これはフラグメントを隠すための方法なのでしょうか?多くの人がこの問題に直面しているので、そうでない場合は、テストされた例で、フラグメントの表示と非表示の方法を説明してください。

 public class MainActivity extends FragmentActivity implements OnClickListener {

        Fragment1 f;
        Button b;
        LinearLayout layout;
        Fragment myf;
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            b = (Button) findViewById(R.id.button1);
            layout = (LinearLayout) findViewById(R.id.ll);
            f = new Fragment1();
        }

        @Override
        public void onClick(View v) {

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);

            if (f.isHidden()) {
                ft.show(f);
                layout.setVisibility(View.VISIBLE);
                b.setText("Hide");
            } else {
                ft.hide(f);
                b.setText("Show");
                layout.setVisibility(View.GONE);
            }
            ft.commit();
            // TODO Auto-generated method stub
        }

どのように解決するのですか?

コンテナの可視性フラグをいじらない - FragmentTransaction.hide/showが内部で処理してくれます。

というわけで、正しいやり方は

FragmentManager fm = getFragmentManager();
fm.beginTransaction()
          .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
          .show(somefrag)
          .commit();


または、android.support.v4.app.Fragmentを使用している場合。

 FragmentManager fm = getSupportFragmentManager();
 fm.beginTransaction()
          .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
          .show(somefrag)
          .commit();