2010-11-23 7 views
4

は、ので、ここでいくつかのステップは、(あなたがスピナーとレイアウトを持っていると仮定)を再生するためには:スピナーのオリエンテーションの変更時にスピナーのドロップダウンビューを表示したままにすることはできますか?それは私が尋ねタイトルからも明らかだ場合、私は知らない

  1. タップ>ドロップダウンリストが表示されます。
  2. デバイスを縦向きから横向きに(またはその逆に)回転させて、リストを閉じています。

私の問題は、デバイスを回転させた後にリストを開いたままにしたいということです。 onConfigurationChangedをオーバーライドすると通常は可能ですが、私はランドスケープモード用に別のレイアウトを定義していますので、私のonConfigurationChangedメソッドではsetContentViewを呼び出してドロップダウンビューを閉じるポートレートモードで開かれました。

ドロップダウンリストが閉じないようにする方法や、デバイスを回転させた後に強制的に表示させる方法がありますか?

答えて

0

デフォルトでは、ポートレートからランドスケープに切り替える際の動作はアクティビティを再起動します。したがって、Spinnerの状態をSharedPreferencesなどのどこかに保存し、アクティビティを(onCreate()またはonResume())メソッドを再起動するときに読み取ることができます。

+0

お寄せいただきありがとうございますが、私はすでに私のスピナーのonSaveInstanceState/onRestoreInstanceStateで試してみましたが、この状況ではあまり役に立ちません。選択された項目だけが保存され、リストが開かれたことは保存されません。スピナーの状態を保存する別の方法がありますか(ドロップダウンビューが開いたという事実を含むもの)ですか?あるいは、私はドロップダウンビューの状態をどうにか保存できますか? – Ade

6

私は(「アクション」の方法をonConfigurationChanged で行われます)、これには非常に醜い解決策を見つけた:

  1. setContentViewを呼び出す前に、ドロップダウンビューが示されている場合、*(チェック)の場合は、現在選択されている位置をスピナーに保存します(int pos = spinner.getSelectedItemPosition())。

    spinner.setSelection(pos);// this way we make sure that the same item 
              // remains selected after rotating the device 
    spinner.performClick(); //show the dropdown view 
    

  • ドロップダウンビューがステップ1で示された場合、setContentViewを呼び出し、スピナーアダプタを設定した後、スピナーにperformClickを呼び出して表示するドロップダウン・ビューを強制

    (*)ドロップダウンビューが表示されているかどうかを確認するのが難しい部分です。私は(まだ)私は、ドロップダウンビューが表示されているかどうかを知ることができます方法を発見していないので、私は次の操作を実行する必要がありました:

    • は、たとえば、という名前(ブール変数にスピナーの押圧状態をホールド、)。

    • スピナーためonTouchListenerを設定し、onTouch方法でを設定するのでisClicked ==真ドロップダウンビューであることを意味し、スピナーをタップするとき、dropdwonビューが開き(trueにをisClicked示されている)。

    • 上書きにonKeyDown又はonKeyUpを及びバックボタンが押されたときがtrue、falseに設定isClicked場合、(IはisClickedバック押圧==真ドロップダウンビューを閉じる手段と仮定する) 。

    • の値を使用することは、ドロップダウン図が示されているかどうかを確認する方法をonConfigurationChanged isClicked。

    私が言ったように、それは醜い修正ですが、今まで私が思いついた唯一のものです。誰か他のアイデアがある場合は、投稿してください。

  • 関連する問題