1

私はAndroidプログラミングの初心者です。現在、デフォルトでデータをソート順に表示し、検索機能も提供するAndroidアプリケーションに取り組んでいます。このために、コンテンツを検索してリストビューに表示する検索というアクティビティを作成しました。私の問題は、デバイスを回転させると、onConfigurationChanged メソッドをオーバーライドした後でも、Activity クラスの onCreate メソッドが呼び出されることです。onConfigurationChanged メソッドを呼び出すために、マニフェスト ファイルで次の変更も行いました。

<activity
    android:name=".Search"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="sensor" >
</activity>

私の検索アクティビティは次のとおりです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  System.out.println("HERE AT ONCREATE");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    System.out.println("HERE AT ON CONFIGURATION CHANGED");
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(R.layout.search_port);
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.search_land);
    }
}

したがって、デバイスを回転させている間の出力は次のようになります。

  1. 設定が変更されました

  2. オンクリエイトはこちら

onCreate()デバイスの回転中に呼び出されるメソッドを取得したくありません。この問題を解決するために私を助けてください。Samsung Galaxy Tab (7 インチ ディスプレイ) で Android 2.2 SDK を使用しています。

4

2 に答える 2

2

上記のコードで達成しようとしていることは、はるかに簡単に実行できます。

レイアウト ファイルの名前を両方とも同じに変更search_layout.xmlし、次のようにプロジェクトに配置する場合:

<project>/res/layout/search_layout.xml       // Portrait Layout
<project>/res/layout-land/search_layout.xml  // Landscape Layout

そして、あなたのアクティビティをこのように変更します:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Search Activity", "onCreate() was called.");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i("Search Activity", "onConfigurationChanged was called.");
}

それが私のアクティビティでセットアップする方法であり、onCreate()メソッドは一度だけ呼び出されます。

于 2012-04-19T15:37:31.763 に答える
-4

それを避ける方法はありません。デバイスを回転させると、Activity が強制終了され、再作成されます。これを回避する方法はありませんが、アクティビティが破棄される前に呼び出される onSaveInstanceState() をオーバーライドできます。

于 2012-04-19T15:33:19.670 に答える