lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Controles giratórios

Os controles giratórios oferecem uma forma rápida de selecionar um valor de um conjunto. No estado padrão, um controle giratório mostra o valor selecionado naquele momento. Um toque no controle giratório mostra um menu suspenso com todos os outros valores disponíveis, dos quais o usuário pode selecionar um novo valor.

É possível adicionar um controle giratório ao layout com o objeto Spinner. Normalmente, isso é feito no layout XML com um elemento <Spinner>. Por exemplo:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

Para preencher o controle giratório com uma lista de opções, você precisa especificar um SpinnerAdapter no código-fonte de Activity ou Fragment.

Preencher o controle giratório com escolhas do usuário

As opções fornecidas para o controle giratório poderão ter qualquer origem, mas deverão ser informadas por meio de um SpinnerAdapter, como um ArrayAdapter, se as opções estiverem disponíveis em uma matriz, ou em um CursorAdapter, se as opções estiverem disponíveis em uma consulta de banco de dados.

Por exemplo: se as opções disponíveis no controle giratório forem predeterminadas, você poderá fornecê-las com uma matriz de strings definida em um arquivo de recursos de string:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

Com uma matriz como essa, é possível usar o código a seguir na Activity ou no Fragment para passar uma matriz ao controle giratório usando uma instância de ArrayAdapter:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.planets_array, 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
spinner.setAdapter(adapter);

O método createFromResource() permite criar um ArrayAdapter usando a matriz de strings. O terceiro argumento para esse método é um recurso de layout que define como a opção selecionada aparece no controle giratório. O layout do simple_spinner_item é fornecido pela plataforma e é o layout padrão que deve ser usado, a menos que você queira definir o seu próprio layout da aparência do controle giratório.

Nesse caso, chame setDropDownViewResource(int) para especificar o layout a ser usado pelo adaptador para exibir a lista de opções do controle giratório (simple_spinner_dropdown_item é outro layout padrão definido pela plataforma).

Chame setAdapter() para aplicar o adaptador ao Spinner.

Responder a seleções do usuário

Quando o usuário seleciona um item na lista suspensa, o objeto Spinner recebe um evento on-item-selected.

Para definir o gerenciador do evento de seleção para um controle giratório, implemente a interface AdapterView.OnItemSelectedListener e o método de retorno de chamada onItemSelected(). Por exemplo, veja a seguir uma implementação da interface em um Activity:

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}

O AdapterView.OnItemSelectedListener exige os métodos de retorno de chamada onItemSelected() e onNothingSelected().

Em seguida, especifique a implementação da interface chamando setOnItemSelectedListener():

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);

Se implementar a interface AdapterView.OnItemSelectedListener com o Activity ou Fragment (como no exemplo acima), você poderá passar this como instância da interface.