1

アクティビティとその 2 つのレイアウトが定義されています。

  1. レイアウト大地
  2. レイアウト

1 番目のレイアウトはランドスケープ モードの大画面用で、2 番目はその他の場合用です。1 番目のレイアウトには以下が含まれます。

  1. フラグメント1
  2. フラグメント2

2 番目のレイアウトには以下が含まれます。

  1. フラグメント1

大画面で横向きモードでアプリを起動すると、getSupportFragmentManager().findFragmentById()呼び出されたActivity.onCreate()ものは両方のフラグメントを正しく返します。向きを縦向きに変更した後、getSupportFragmentManager().findFragmentById()に対して null 以外を返しますが、このフラグメントはこのレイアウトで定義されていないため、返すfragment2必要があります。null問題は、返されたフラグメント オブジェクトが正しくnullなく、アクセス中にポインター例外が発生することです。であるはずnullですよね?

4

1 に答える 1

4

本当は… そんなはずはないと思いますnull

layout-large-landレイアウトが に表示された後ActivityActivityはそれらの両方を に追加FragmentsFragmentManagerます。を回転するActivityと、FragmentManagerはその状態とそのFragments内部を保持し、まだそれを保持してFragment2いるため、findFragmentById()は を返しませんnull

Fragment2そこにありますが、 にはアタッチされません。これはまたはActivityを使用して確認できます。fragment.isAdded()fragment.isVisible()

あなたのケースで、2 ペイン (横長) か 1 ペイン (縦長) かを知りたい場合は、次のチェックを行う必要がありますfindViewById(R.id.secondFragmentContainer)==null

于 2013-04-04T14:42:32.653 に答える