web-dev-qa-db-fra.com

Comment utiliser onItemSelected in Android?

package org.example.mbtiapplication;

import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.AdapterView.OnItemClickListener;
import Android.widget.AdapterView.OnItemSelectedListener;
import Android.widget.ArrayAdapter;
import Android.widget.Spinner;

public class MBTITest extends Activity implements OnItemSelectedListener  {

    private Spinner firstSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mbtitest);

        Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1);
        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.spinnerarraybool, Android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        firstSpinner.setAdapter(adapter);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // TODO Auto-generated method stub

    }

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

Mise en page XML:

<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <TableRow
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" >

        <TextView
            Android:layout_width="120dp"
            Android:layout_height="match_parent"
            Android:layout_marginLeft="5dp"
            Android:gravity="center_vertical"
            Android:text="I like to go out more than staying home." />

        <Spinner
            Android:id="@+id/spinner1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </TableRow>

    <TableRow
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" >

        <TextView
            Android:layout_width="120dp"
            Android:layout_height="match_parent"
            Android:layout_marginLeft="5dp"
            Android:gravity="center_vertical"
            Android:textSize="10.5dp"
            Android:text="Sensing v Intuition" />

        <Spinner
            Android:id="@+id/spinner2"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />
    </TableRow>
</TableLayout>

Je suis un nouveau programmeur Android et je ne parviens pas à utiliser Spinner. J'ai essayé plusieurs tutoriels et je suis toujours perplexe. J'aimerais savoir quelle est ma prochaine étape, pour autant que je sache, j'ai configuré mon spinner en XML. En Java, j'ai identifié ce spinner, créé un ArrayAdapter pour ledit spinner et spécifié certaines options. Je ne suis pas sûr d'avoir déjà rempli le casserole ou de savoir comment utiliser l'objet casserole. J'aimerais pouvoir utiliser l'objet spinner pour sélectionner l'une des trois options, puis conserver cette valeur dans la vue texte à l'intérieur du spinner. 

32

Tu y es presque. Comme vous pouvez le constater, la variable onItemSelected vous donnera un paramètre position que vous pouvez utiliser pour récupérer l'objet de votre adaptateur, comme dans getItemAtPosition(position).

Exemple:

spinner.setOnItemSelectedListener(this);

...

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

Cela mettra un message à l'écran, avec l'élément sélectionné imprimé par sa méthode toString ().

41
bgse

Si vous ne souhaitez pas implémenter le programme d'écoute, vous pouvez le configurer directement là où vous le souhaitez (appelez votre spinner after votre adaptateur a été défini):

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                switch (position) {
                    case 0:
                        Toast.makeText(parent.getContext(), "Spinner item 1!", Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        Toast.makeText(parent.getContext(), "Spinner item 2!", Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        Toast.makeText(parent.getContext(), "Spinner item 3!", Toast.LENGTH_SHORT).show();
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

               // sometimes you need nothing here
            }
        });
23
Azurespot

Autre chose: Lorsque vous avez plusieurs spinner dans votre présentation, vous devez implémenter une sélection de commutateur dans la méthode onItemSlected () pour savoir quel widget a été cliqué. Quelque chose comme ça:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    switch (parent.getId()){
        case R.id.sp_alarmSelection:
            //Do something
            Toast.makeText(this, "Alarm Selected: " + parent.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
            break;
        case R.id.sp_optionSelection:
            //Do another thing 
            Toast.makeText(this, "Option Selected: " + parent.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
            break;
    }
}
14
Jorge Torres

Joseph: spinner.setOnItemSelectedListener(this) Devrait être inférieur à Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1); Sur onCreate

2
Tuan Do

Pour Kotlin et les liaisons, le code est le suivant:

binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            }
        }
0
Ilja Popov
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

               //check if spinner2 has a selected item and show the value in edittext

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

               // sometimes you need nothing here
            }
        });

spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

               //check if spinner1 has a selected item and show the value in edittext


            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

               // sometimes you need nothing here
            }
        });
0
Rohit Sharma

Je pense que cela vous sera utile Essayez ceci que j'utilise pour changer la langue de mon application

String[] districts;
Spinner sp;

......

 sp = (Spinner) findViewById(R.id.sp);
         districts = getResources().getStringArray(R.array.lang_array);
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, Android.R.layout.simple_spinner_item,districts);
         sp.setAdapter(adapter);
         sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
              @Override
             public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) {
                  // TODO Auto-generated method stub
                  int index = arg0.getSelectedItemPosition();
                  Toast.makeText(getBaseContext(), "You select "+districts[index]+" id "+position, Toast.LENGTH_LONG).show();
                  switch(position){
                      case 0:
                          setLocal("fr");
                          //recreate();
                          break;
                      case 1:
                          setLocal("ar");
                          //recreate();
                          break;
                      case 2:
                          setLocal("en");
                          //recreate();
                          break;
                      default: //For all other cases, do this
                          setLocal("en");
                          //recreate();
                          break;
                  }
              }
             @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                   // TODO Auto-generated method stub
                         }
        });

et c'est mon tableau de chaînes

<string-array name="lang_array">
    <item>french</item>
    <item>arabic</item>
    <item>english</item>
</string-array>
0
Said Erraoudy