7

ユーザーがまだ明示的に何も選択していない場合でも、Android の Spinner クラス (およびおそらく一般的には ListView) が、 を呼び出した後に OnItemSelectedListener のonItemSelected()メソッドを呼び出すようです。setAdapter()

これが多くの状況でどのように役立つかはわかりますがonItemSelected()、アイテムが実際に具体的に選択されたときにのみ呼び出されたい場合があります。

onItemSelected()この動作を制御し、アダプターを設定した後にSpinner を呼び出さない方法はありますか?

4

5 に答える 5

5

私はこのソリューションをまだ長い間使用していないため、期待どおりに機能することを完全に確信しているわけではありませんが、これまでのところ、この回避策でうまくいきました。

    spinner.setOnItemSelectedListener( new OnItemSelectedListener() {
        protected Adapter initializedAdapter = null;

        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            // Always ignore the initial selection performed after setAdapter
            if( initializedAdapter !=parent.getAdapter() ) {
                initializedAdapter = parent.getAdapter();
                return;
            }

            ...
        }
    }

より良い方法はありますか?

于 2010-09-03T16:43:08.170 に答える
3

以下のようにリスナーをスピナーに追加します。

spinner.post(new Runnable(){
    public void run()
    {
        spinner.setOnItemSelectedListener( new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                ...
            }
        }
    }
});
于 2014-03-02T06:57:20.997 に答える