1. ホーム
  2. android

[解決済み] 新しくインスタンス化されたスピナーで、onItemSelectedを起動させないようにするにはどうすればよいですか?

2022-03-21 06:33:51

質問

この問題を解決するために、あまりエレガントではない方法をいくつか考えてみたのですが、何か見逃していることがあるはずです。

私の onItemSelected これは望ましくない動作です。 ユーザーが何かを選択するまで、UIは何もしないようにしてほしいです。

にリスナーを設定してみたりもしました。 onResume() というようなことが起こるかもしれません。

ユーザーがコントロールに触れる前に、これが発射されないようにするには、どうしたらよいでしょうか?

public class CMSHome extends Activity { 

private Spinner spinner;

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Heres my spinner ///////////////////////////////////////////
    spinner = (Spinner) findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.pm_list, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    };

public void onResume() {
    super.onResume();
    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

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

     Intent i = new Intent(CMSHome.this, ListProjects.class);
     i.putExtra("bEmpID", parent.getItemAtPosition(pos).toString());
        startActivity(i);

        Toast.makeText(parent.getContext(), "The pm is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

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

解決方法は?

リスナーを設定する前にアダプタを設定すると、選択イベントが発生しないのではと思ったのですが、あなたの解決策を期待します。

とはいえ、単純なブーリアン・フラグがあれば、不正な最初の選択イベントを検出し、それを無視することができるようになります。