Spinner — получение значения и обработка событий

| 03.06.2014

В прошлый раз мы создали простейший Spinner с возможностью выбора одного из значений. На этот раз мы потренируемся «реагировать» на событие выбора определенного пункта и будем выводить его значение в сообщениях Toast. Помимо этого мы добавим в layout кнопку, при клике по которой будем также выводить позицию выбранного пункта.

Итак, видоизменим layout.

res/layout/activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
 
</LinearLayout>

Строковые ресурсы strings.xml оставляем без изменений (скопируйте с прошлого урока).

Файл MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package ru.androiddocs.spinner;
 
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.os.Bundle;
import android.view.View.OnClickListener;
 
 
public class MainActivity extends ActionBarActivity implements OnItemSelectedListener{
 
    Spinner spin;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        spin = (Spinner) findViewById(R.id.spinner1);
 
        ArrayAdapter<String> namesAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.names));
 
        namesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(namesAdapter);
        spin.setSelection(2);
        spin.setOnItemSelectedListener(this);
 
        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {	
 
            public void onClick(View v) {
 
                Toast toast = Toast.makeText(getApplicationContext(), 
                        spin.getSelectedItemPosition() + "", Toast.LENGTH_SHORT);
                toast.show();
 
            }
        });
    }
 
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, 
            int pos, long id) {
 
        Toast toast = Toast.makeText(this, parent.getItemAtPosition(pos) + "", Toast.LENGTH_SHORT);
        toast.show();
    }
 
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
 
}

Теперь при выборе нового пункта будет появляться всплывающее сообщение. Обработка данного события происходит в методе onItemSelected(). Также мы были «обязаны» добавить метод onNothingSelected(), т.к. наследуемся от интерфейса onNothingSelected (этот метод оставляем пустым).

Spinner - получение значения и обработка событий

В методе onCreate() мы вызвали также метод setSelection(), чтобы активировать пункт с позицией номер 2 (отсчет с 0). Таким образом, можно динамически активировать нужное значение в выпадающем списке.

При нажатии на кнопку отрабатывается метод onClick(), в котором с помощью метода getSelectedItemPosition() мы получаем позицию текущего выбранного пункта выпадающего списка. Зная позицию уже несложно получить значение из массива данных.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*