1

ページ上に多数のスピナーを使用して、意図的に起動されたアクティビティがあります。このガイドに従って、スピナーのItemSelectedリスナーを設定しました。問題は、各スピナーの最初のアイテムが基本的に「選択してください」であるため、空白のボックスではないことです。したがって、ItemSelectedリスナーは、「選択してください」がスピナーにあることを検出し、ロードされたのではなく選択されたと見なしているようです。デフォルトでは。理想的には、リスナーが実際の選択が行われたときにのみ検出するようにします。デフォルトの選択を無視する最良の方法は何ですか?

関連するコードは次のとおりです。

    ageSpinner = (Spinner) findViewById(R.id.ageSpinner);
    ageAdapter = ArrayAdapter.createFromResource
    (this, R.array.ageArray, android.R.layout.simple_spinner_item);
    ageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ageSpinner.setAdapter(ageAdapter);
    ageSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext(), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
4

4 に答える 4

1

ブール値をfalseに設定し、onItemSelectedでチェックし、falseの場合はtrueに設定して、他に何もしません。次回は、それが本当のときはいつものようにしてください。

于 2012-05-18T22:09:10.110 に答える
1

ここでは多くのアプローチが可能です。たとえば、リフレクションを使用する通常の動作をオーバーライドしたり、単に模倣にSpinner切り替えたりすることができます。これをクリックすると、がポップアップ表示されます。ButtonSpinnerAlertDialog

ただし、他のソリューションの方が簡単に実装できます。Barakは1つに名前を付けましたが、代わりに、Spinner「選択してください」が常に最初のアイテム(したがって、位置0)であり、アイテムの並べ替えを行っていないことを前提として、で選択した位置を確認することもできます。

問題に適した可能性の1つが見つかると確信していますがonItemSelected(...)、最初の選択で問題が発生する理由についてもう少し詳しく説明することもできますか?

于 2012-05-19T02:35:06.973 に答える
1

問題は、選択が最初のレイアウトフェーズで行われることです。したがって、レイアウトが初めて計算されるときに、がSpinner発生しonItemSelectedます。それはかなり迷惑ですが、それが機能する方法です。いくつかの異なることを試すことができますが、すでに「何かを選択してください」アイテムがある場合、選択したアイテムが0の場合、イベントを無視するのが最善の方法です。

于 2012-05-19T02:43:43.467 に答える
0

OPによる解決策。

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
        if (pos != 0) {
        //this if makes sure it ignores 0, which is 
            //Please Select in the drop down    
      Toast.makeText(parent.getContext(), parent.getTag().toString() +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
于 2018-07-15T18:26:32.540 に答える