wake-up-neo.net

Wie kann ich onItemSelected in Android verwenden?

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

XML-Layout:

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

Ich bin ein neuer Android-Programmierer und habe Probleme mit Spinner, ich habe mehrere Tutorials ausprobiert und bin immer noch verwirrt. Ich würde gerne wissen, was mein nächster Schritt hier ist, soweit ich weiß, dass ich meinen Spinner in XML eingerichtet habe. In Java habe ich diesen Spinner identifiziert, einen ArrayAdapter für diesen Spinner erstellt und einige Optionen angegeben. Ich bin mir nicht sicher, ob ich den Spinner schon bestückt habe oder wie man das Spinnerobjekt manövriert. Ich möchte in der Lage sein, das Spinnerobjekt zu verwenden, um eine von drei Optionen auszuwählen und diesen Wert dann innerhalb der Textansicht im Spinner zu behalten. 

Du bist fast da. Wie Sie sehen, gibt die Variable onItemSelected einen Parameter position aus. Sie können diesen Befehl verwenden, um das Objekt von Ihrem Adapter abzurufen, wie in getItemAtPosition(position).

Beispiel:

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

Dadurch wird eine Nachricht auf dem Bildschirm eingeblendet, wobei das ausgewählte Element mit seiner toString () -Methode gedruckt wird.

41
bgse

Wenn Sie den Listener nicht implementieren möchten, können Sie ihn direkt dort einrichten, wo Sie ihn haben möchten (Aufruf Ihres Spinners after Ihr Adapter wurde eingestellt):

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

Eine andere Sache: Wenn Sie mehrere Spinner in Ihrem Layout haben, müssen Sie eine Schalterauswahl in der Methode onItemSlected () implementieren, um zu wissen, auf welches Widget geklickt wurde. Etwas wie das:

@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) Sollte unter Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1); Auf onCreate liegen.

2
Tuan Do

Für Kotlin und Bindings lautet der Code:

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

Ich denke, das kommt Ihnen zugute Versuchen Sie, dies zu verwenden, um die Sprache in meiner Anwendung zu ändern.

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

und das ist mein String-Array

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