2013-11-22 8 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 Układ:Jak korzystać z opcji onItemSelected w systemie Android?

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

Jestem nowy programista Android i kłopoty z korzystaniem Spinner, próbowałem wiele tutoriali i nadal jestem zdezorientowany. Chciałbym wiedzieć, jaki jest mój następny krok, o ile wiem, ustawiłem swój spinner w XML, w Javie zidentyfikowałem tego spinnera, stworzyłem ArrayAdapter dla wspomnianego spinnera i sprecyzowałem kilka opcji. Nie jestem do końca pewien, czy zaludniłem jeszcze spinner, czy też, jak to zrobić, z obiektem typu spinner. Chciałbym móc użyć obiektu typu spinner, aby wybrać jedną z trzech opcji, a następnie zachować tę wartość wewnątrz widoku tekstowego wewnątrz pokrętła.

Odpowiedz

34

Już prawie jesteś. Jak widać, onItemSelected poda parametr position, można go użyć do pobrania obiektu z adaptera, jak w przypadku getItemAtPosition(position).

przykład:

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

ten wprowadzi komunikatu na ekranie, w wybranej pozycji drukowanej metodą jej toString().

+1

Czy możesz pokazać mi przykład? To kopie mój tyłek przez ostatnie godziny. –

+0

Zobacz edycję, to wszystko, co do niej należy. – bgse

+1

Po prostu przyłapany na tym, że brakuje ci również "spinner.setOnItemSelectedListener (this)" :) – bgse

2

Joseph: spinner.setOnItemSelectedListener(this) powinna być niższa Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1); na onCreate

20

Jeśli nie chcą wprowadzić słuchacza, można ustawić go tak bezpośrednio tam, gdzie chcesz (wezwanie na obrotówki po adapter został ustawiony):

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

Kolejna rzecz: Gdy masz więcej niż jednego pokrętła w Y nasz układ, musisz zaimplementować wybór przełącznika w metodzie onItemSlected(), aby wiedzieć, który widget został kliknięty. Coś takiego:

@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; 
    } 
} 
Powiązane problemy