16

私は機能する相互作用を備えたスピナーを持ってonItemSelectedいますが、Api仕様は次のように述べています:

このコールバックは、新しく選択された位置が以前に選択された位置と異なる場合、または選択されたアイテムがなかった場合にのみ呼び出されます。

この制限を取り除く必要があり、ユーザーが同じ要素を選択した場合にもコールバックが呼び出されるようにしたいと思います。どうやってするか?Spinnerクラスを拡張することについての提案を読み、位置をに設定しINVALID_POSITIONましたが、それを理解していない/実行できません。誰もが同じことをしましたか?

4

6 に答える 6

0

これは、カスタム ダイアログ モードと whitout promt を備えたスピナー要素です。

<Spinner
    android:id="@+id/spinner_metatag"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/search_adv" 
/>

デフォルト値が位置 0 に置かれる配列要素:

<string-array name="search_adv">
    <item>@string/search_adv_prompt</item>
    <item>@string/search_adv_title</item>
    <item>@string/search_adv_desc</item>
    <item>@string/search_adv_autore</item>
    ....
</string-array>

デフォルト値を持つ配列の文字列要素:

<string name="search_adv_prompt">Scegli un metatag</string> <!-- Default value-->
<string name="search_adv_title">Titolo</string> 
<string name="search_adv_desc">Descrizione</string> 
<string name="search_adv_autore">Autore</string>
...

そして、ここに onCreateMethod で発生するイベントを防止するコードと、既に選択されている同じ要素を選択できるようにするための回避策があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_adv_main);

    spinner = (Spinner) findViewById(R.id.spinner_metatag);

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
            //prevent onCreate event fire and the loop
            if(pos==0)
                return;

            //HERE YOUR CODE

            //at the end move to the default element the spinner
            spinner.setSelection(0);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {}
    });
}

希望が役立ちます。アイデアは、 TreKing's answerの2番目のソリューションから来ています

于 2013-11-28T16:07:27.523 に答える
0

選択した項目を再度選択した理由。そのタスクをもう一度実行したい場合は、更新ボタンを押してください。

于 2013-11-21T09:44:57.767 に答える
0

You can do this by a custom adapter, like create a layout of your desire views, then inflate this in custom adapter then on onItemClick function you can get the view by this function.

To distinguish each view you must to set the tag of each row.

It probably works in your condition.

Let me know any issue if you have

于 2011-11-21T13:18:09.267 に答える
-2

値を変数に格納し、変数を -1 で初期化する必要があると思います。また、ユーザーがアイテム スピナーを選択したときに値を変更します。値が -1 の場合は、ユーザーに再選択するように依頼するか、必要なものを何でも指定します。

@i ユーザーが同じ要素を選択した場合にもコールバックが呼び出されるようにします。これはAndroidのデフォルトの動作であるため、Androidはあなたのためにそれを行います。

于 2011-11-21T13:21:00.583 に答える