2

onConfigurationChanged を呼び出していないアプリケーションがありますが、特定のケースでのみ呼び出しています。A と B の 2 つのアクティビティがあります。アクティビティ A にはグリッドビューがあり、方向に基づいて列の数を変更します。これは、onConfigurationChanged を使用して正常に機能します。

ただし、次の手順に従うと、onConfigurationChanged() は取得されません。

  1. アクティビティ A、オリエンテーション 1 -> アクティビティ B (静止オリエンテーション 1)
  2. アクティビティ B (現在は方向 2) でデバイスを回転させます。
  3. アクティビティ A に戻り、オリエンテーション 2 に入ります。onResume が起動され、レイアウトを調整します。
  4. アクティビティ A で、方向 1 に戻ります。何も起動されません (onCreate、onResume、onConfigurationChanged ... など)。レイアウトが間違っています (列数が Orientation2 に設定されています)。

この後、アクティビティ A で回転し続けると、残りの回転で onConfigurationChanged が発生し、それに応じてレイアウトが調整されます。別の活動から戻った後の最初のローテーションです。どの方向から始めても、結果は同じです。

onConfigurationChanged 以外に見るべきものはありますか?

4

1 に答える 1

1

onConfigurationChanged は、アクティブなコンテキスト (目に見えるアクティビティまたはフラグメント) でのみ発生します。

onConfigurationChanged の列数を変更する代わりに、res/layoutおよびres/layout-landフォルダーで別のレイアウトを使用します。XML で列数を定義します。この方法では、onConfigurationChanged をオーバーライドする必要さえなく、Android が面倒な作業を処理してくれます:D

レイアウトはlayout-land横向きで使用され、layoutレイアウトは縦向きで使用されます (またはデフォルトとして使用されます)。

于 2013-02-21T16:06:14.887 に答える