2011-12-21 6 views
23

Próbuję uzyskać pozycję (numer) pokrętła, gdy zostanie wybrana, aby użyć go w innym działaniu, które będzie wyświetlać inną mapę za każdym razem w zależności od wybranego elementu. kiedy uruchomię aplikację, zawiesza się. jest to pierwszy kod aktywny:Zdobądź pozycję przędzarki w Androidzie

public class TestProjectActivity extends Activity { 
    public Spinner spinner1; 
    public Integer number; 
    private Button valideButton; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MySpinner(); 
     valide_button(); 

    } 

    public void MySpinner() { 

     final Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); 

     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.num, android.R.layout.simple_spinner_item); 
             adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner1.setAdapter(adapter); 

     spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { 

      public void onItemSelected(AdapterView<?> parentView, 
        View selectedItemView, int position, long id) { 
       // Object item = parentView.getItemAtPosition(position); 

       TestProjectActivity.this.number = spinner1 
         .getSelectedItemPosition() + 1; 

      } 

      public void onNothingSelected(AdapterView<?> arg0) {// do nothing 
      } 

     }); 

    } 

    public void valide_button() { 

     valideButton = (Button) findViewById(R.id.valide_button); 
     valideButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       Intent intent = new Intent(TestProjectActivity.this, 
         MetroMapActivity.class); 
       startActivity(intent); 
      } 

     }); 

    } 

} 

Odpowiedz

63

Sposób, aby uzyskać wybór turbinki jest: referencyjny

spinner1.getSelectedItemPosition(); 

Dokumentacja: http://developer.android.com/reference/android/widget/AdapterView.html#getSelectedItemPosition()

Jednak w kodzie, na jedno miejsce odnosisz się do tego w twoim setOnItemSelectedListener(). Nie jest konieczne odpytywanie spinnera, ponieważ metoda onItemSelected przekazuje pozycję jako zmienną "position".

Więc można zmienić ten wiersz na:

TestProjectActivity.this.number = position + 1; 

Jeśli to nie rozwiązuje problemu, proszę pisać wygenerowany komunikat o błędzie w przypadku awarii aplikacji.

+0

Już w kodzie, ale kiedy próbuję użyć "numeru" w innym działaniu, ulega awarii –

+0

Spróbuj przenieść "numer" do klasy aplikacji. Zmienne aktywności są lepsze w utrzymaniu aktywności. Alternatywnie spróbuj ustawić numer jako statyczny element. przeczytaj tutaj: http://stackoverflow.com/q/4208886/602661 –

+0

Briliant! Stworzyłem klasę aplikacji, która będzie przechowywać dane, które podzielę między dwie aktywności. Pozdrawiam człowieka. –

0
final int[] positions=new int[2]; 
    Spinner sp=findViewByID(R.id.spinner); 

    sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      Toast.makeText(arg2....); 
     } 

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

     } 
    }); 
0
if (position ==0) { 
    if (rYes.isChecked()) { 
     Toast.makeText(SportActivity.this, "yes ur answer is right", Toast.LENGTH_LONG).show(); 
    } else if (rNo.isChecked()) { 
     Toast.makeText(SportActivity.this, "no.ur answer is wrong", Toast.LENGTH_LONG).show(); 
    } 
} 

Ten kod powinien zaznaczyć oba pola wyboru.
Czy jest z tym jakiś problem?