web-dev-qa-db-fra.com

Plusieurs filateurs et onItemSelected

J'ai deux filateurs qui déclenchent l'événement onItemSelected. La question est de savoir comment savoir lequel a déclenché un tel événement? Jusqu'à présent, j'ai essayé:

 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;
    }

Mais seul le premier journal est affiché, il n'y a donc aucune correspondance dans le commutateur.

38
xain

utilisation:

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

c'est plutôt ce dont vous avez besoin. Le view dans votre paramètre est la `` ligne '' réelle (c'est-à-dire l'enfant cliqué de l'élément spinner) et le parent est le `` spinner '' réel que vous recherchez.

82
xandy

Spinner est une sous-classe de AdapterView. L'objet parent transmis à la méthode est le spinner dans lequel l'élément a été sélectionné.

3
Jems

Utilisez le code ci-dessous si vous avez plusieurs filateurs dans une activité et que vous utilisez la méthode de remplacement 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
 }

}

soit vous pouvez utiliser un boîtier de commutation

1
Aditya Patil

Si vous importez votre XML sur Kotlin, vous pouvez l'utiliser comme suit:

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