0

私のコードでは、スピナーでアイテムを選択すると、アプリケーションが画面を変更します。ただし、初めてロードするときは、ItemSelectedListener を実行します。フォームがロードされたときではなく、スピナーでアイテムを選択したときにのみコードを実行する必要があります。

コード:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_location_layout);

Spinner spnEUID = (Spinner)findViewById(R.id.spnEUID);
final DatabaseHandler handler = new DatabaseHandler(this);

ArrayList<String> EUIDs = handler.GetAllAOI();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, EUIDs);
spnEUID.setAdapter(adapter);

final EditText txtEUID = (EditText)findViewById(R.id.txtScanEUID);
txtEUID.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
            PublicVariables.AOI = handler.getAOI(Integer.parseInt(txtEUID.getText().toString()));
            Intent intent = new Intent(SelectLocationScreen.this, RaploScanScreen.class);
            startActivity(intent);
        }
        return false;
    }
});

spnEUID.setOnItemSelectedListener(new OnItemSelectedListener () {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        PublicVariables.AOI = parent.getItemAtPosition(pos).toString();
        Intent intent = new Intent(SelectLocationScreen.this, RaploScanScreen.class);
        startActivity(intent);
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
});
}
4

1 に答える 1

3

previousSelectionOnItemSelectedListenerのように変数を追加することでこれを解決しました。

  • である場合null、それは誤報です。
  • そうでない場合は、ユーザーがこの選択を行いました。

同様の質問に対する私の回答は次のとおりです。ユーザーが同じアイテムを再度選択したときに、問題を回避するためにこれを書きました。奇妙な Android スピナーの動作

于 2013-03-14T19:55:52.940 に答える