2012-01-26 3 views
1

私は2つのアクティビティを持っていますが、activity1はactivity2を開始しています。 は、アクティビティ2で私がAutoCompleteTextViewにOnFocusChangeListenerを登録:AutoCompleteTextViewでのBadTokenExceptionリスナー内のshowDropDown()

someTextView.setOnFocusChangeListener(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
    if (hasFocus) 
    ((AutoCompleteTextView)v).showDropDown(); 
    else 
    ((AutoCompleteTextView)v).dismissDropDown(); 
}  
}); 

私はTextViewの中に何かを書くと、その後の活動の設定変更(画面回転)場合、私はWindowManager.BadTokenExceptionを取得します。 これを、showDropDownメソッドとdismissDropdownメソッドに(コメントで)分離しました。 私はまた、2つのメソッドを(リスナを通して渡されるものではなく)ActivityのViewオブジェクト上で直接実行しようとしましたが、同じ例外がありました。

何が間違っていますか?

+0

あなたは、画面が回転するとき、それは*デフォルト*既存の活動が破壊され、新しいものがそれを置き換えるために作成したことを知っていますか? –

+0

はい、でも私は何をしようとしているのが間違っているのか分かりません。私はかなりAndroid開発に新しいです。 –

+0

このコードの問題点を教えてください。コンフィグレーションの変更時にアクティビティが破棄され、新しいアクティビティが作成された後、新しいアクティビティが作成され、新しいリスナが登録されます。 –

答えて

0

姿勢が活動性のデスティネーションを変更し、再び作成するとき。これにより、以前のアクティビティコンテキストのコンテキストによって作成された自動完成のオープンリストが、アクティビティが破棄されるときに破棄されます。あなたはorientiaonを処理しなければなりません自分自身を変更します。したがって、ローテーション活動では、destoryとauto-completeリストビューは同じではありません。

この行をあなたのAndroidManifest.xmlのアクティビティタグに追加してください。

android:configChanges="orientation|keyboard|keyboardHidden" 

例えば

<activity 
      android:name=".LoginPageActivity" 
      android:label="@string/app_name" 
      android:screenOrientation = "sensor" 
      android:configChanges="orientation|keyboard|keyboardHidden"/> 
+0

これはテキストビューであり、開いているダイアログではありません –

+0

実装し、 – Arslan

+0

それは動作します、ありがとう!私は実際にローテーションに関する何かを実際に処理する必要がありますか?たとえば、正しいレイアウトを膨らませるなどですか? –

関連する問題