2013-11-22 12 views
25
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:Wie kann ich onItemSelected in Android verwenden?

<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 haben Probleme mit der Verwendung von Spinner, ich habe mehrere Tutorials versucht und immer noch verwirrt bin. Ich würde gerne wissen, was mein nächster Schritt hier ist, soweit ich weiß, habe ich meinen Spinner in XML eingerichtet, in Java habe ich diesen Spinner identifiziert, einen ArrayAdapter für diesen Spinner erstellt und einige Optionen angegeben. Ich bin nicht sicher, ob ich den Spinner bereits befüllt habe oder wie man mit dem Spinner-Objekt manövriert. Ich möchte in der Lage sein, das Spinner-Objekt zu verwenden, um eine von drei Optionen auszuwählen und diesen Wert dann innerhalb der Textansicht innerhalb des Spinner zu behalten.

Antwort

34

Sie sind fast da. Wie Sie sehen können, gibt onItemSelected einen position Parameter, mit dem Sie das Objekt von Ihrem Adapter abrufen können, 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(); 
} 

Dies wird eine Meldung auf dem Bildschirm gesetzt, mit dem ausgewählten Elemente durch seine toString() Methode gedruckt.

+1

Würdest du mir ein Beispiel zeigen? Das hat mir in den letzten Stunden den Arsch getreten. –

+0

Sehen Sie die Bearbeitung, das ist alles, was es ist. – bgse

+1

Nur festgestellt, dass Sie auch "spinner.setOnItemSelectedListener (this)" fehlt :) – bgse

2

Joseph: spinner.setOnItemSelectedListener(this) sollte unter Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1); auf onCreate

20

sein, wenn Sie möchten, den Hörer nicht implementieren, können Sie es nach oben wie folgt gesetzt werden können direkt an der gewünschten Stelle (Anruf auf Ihrem Spinner nach Ihren Adapter eingestellt wurde):

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

eine andere Sache: Wenn Sie mehr als einen Spinner in y In unserem Layout müssen Sie in der Methode onItemSlected() eine Schalterauswahl implementieren, um zu wissen, auf welches Widget geklickt wurde. Etwas wie dieses:

@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; 
    } 
} 
Verwandte Themen