3

スピナーに関するスレッドと、onItemSelected がトリガーされたときのスレッドを調べてきました。スピナー項目を手動で選択するか、spinner.setSelection(position) メソッドを介してプログラムで項目を選択するかにかかわらず、トリガーされると結論付けました。

私の問題は、OnItemSelected コールバック メソッドがコード内で最初に呼び出されることですが、他のいくつかのメソッドの実行が終了した後に実行されます。私のコード ロジックは、特定のステップが順番に実行されることに依存しているため、これは望ましくない動作です。

if(conition is true)
  fillSpecialtySpinner();

if(another condition is true)
  fillSubSpecialtySpinner();

fillSpecialtySpinner() メソッドには、コードの spinner.setSelection(position) 行が含まれています。しかし、どういうわけか、2 番目の if がチェックされた後に実行され、fillSubSpecialtySpinner の実行が終了します。

どんな助けでも大歓迎です。前もって感謝します!

4

2 に答える 2

0

私が正しく理解している場合は、fillSubSpecialtySpinner()メソッドが。の後にのみ呼び出されることを確認する必要がありますspecialitySpinner.onItemSelected()

fillSubSpecialtySpinner()内から電話してもらえますspecialitySpinner.onItemSelected()か?

于 2012-05-29T09:49:16.660 に答える
0

コールバックは、他のすべての関数が実行されるまで発生しません、そうです、とバケタは言いました。

したがって、ブール値を false に設定し、スピナーに変更を加えて (ブール値が true の場合は onItemSelected でコードを実行します)、それを true に設定することはできません。これは、ブール値が true になった後に関数が呼び出されるためです。

ただし、問題に対する簡単で一般的な解決策があります(質問に対する受け入れられた回答を参照してください):

望ましくない onItemSelected 呼び出し

于 2014-03-15T19:54:24.407 に答える