2012-04-19 23 views
1

私はアンドロイドプログラミングの初心者です。今ではデータをソート順でデフォルトで表示し、検索機能を提供するアンドロイドアプリケーションに取り組んでいます。このために、私はコンテンツと検索をリストビューで検索する検索と呼ばれるアクティビティを作成しました。私の問題は、デバイスを回転させるときに、onConfigurationChangedメソッドをオーバーライドした後でも、ActivityクラスのonCreateメソッドが呼び出されることです。また、onConfigurationChangedメソッドを呼び出すために、マニフェストファイルで以下の変更を行いました。次のように私の検索アクティビティがある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. HERE上の構成AT AT HERE

  2. を変えましたONCREATE

私はデバイスを回転させながらonCreate()メソッドを呼び出すことを望みません。この問題を解決するために私を助けてください。私はサムスンギャラクシータブ(7インチディスプレイ)でAndroid 2.2 SDKを使用しています。

+1

マニフェストファイルのターゲットAPIのバージョンは何ですか?あなたはこのリンクをチェックしましたか?ターゲットが13以上であれば、「スクリーンサイズ」も必要になるようです。http://developer.android.com/guide/topics/manifest/activity-element.html – kosa

+0

@thinksteep私は何が間違っているのか分かりませんが、デバッグ私は、onConfigurationChangedメソッドが呼び出された後、再びそのアクティビティのonCreateメソッドを呼び出すことができます。私はその奇妙だと思う。 – Krishna

+0

試しましたか?http://developer.android.com/guide/topics/resources/runtime-changes.html – kosa

答えて

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()メソッドは一度だけ呼び出されます。

+0

あなたの答えはありがたいです。問題はonCreateメソッドが終了せず、いくつかの初期化が必要です。 、活動の開始時に。しかし、デバイスの向きを変えながら同じことを再作成または再初期化することはありません。 – Krishna

-4

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

+3

マニフェストファイル自体のconfigChangesを使用すると、onCreate(再作成)の呼び出しを避けることができます。このリンクを正しく読んでください。 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges – kosa

+0

これは間違った答えです。configChangesをアクティビティのマニフェストファイルに宣言することができます。同じ名前のXMLファイルレイアウトを使用しても、アクティビティを再作成しません。 – akash89

関連する問題