web-dev-qa-db-ja.com

複数のスピナーとonItemSelected

OnItemSelectedイベントをトリガーする2つのスピナーがあります。問題は、どのイベントがそのようなイベントをトリガーしたかをどのようにして知ることができるかです。これまでのところ、私は試しました:

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

    Log.d("form","onitemselected");
    switch (view.getId()) {
    case R.id.region_spinner:
        Region r = (Region)sregions.getSelectedItem();
        Log.d("form","regionid:" + r.id);
        break;
    case R.id.state_spinner:
        Log.d("form","state id:");
        break;
    }

ただし、最初のログのみが表示されるため、スイッチに一致するものはありません。

38
xain

使用する:

switch(parent.getId()) {
    ...
}

代わりにあなたが必要なものです。パラメータのviewは実際の「行」(つまり、スピナーアイテムのクリックされた子)で、親は実際の「スピナー」です。

82
xandy

Spinnerは、AdapterViewのサブクラスです。メソッドに渡される親オブジェクトは、アイテムが選択されたスピナーです。

3
Jems

1つのアクティビティに複数のスピナーがあり、onItemSelectedオーバーライドメソッドを使用している場合は、以下のコードを使用します

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
 if (parent!!.id == R.id.spinner_1) {
    // first spinner selected
 } else if (parent!!.id == R.id.spinner_2) {
    // second spinner selected
 }

}

スイッチケースも使えます

1
Aditya Patil

KotlinにXMLをインポートすると、次のように使用できます。

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: 
Long) {
when (parent)
    firstSpinner -> {
        // first spinner selection
        }
    secondSpinner -> {
        // second spinner selected
        }
    }
}
0
Dan Zeevi