Controles giratórios

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

É possível adicionar um ícone de carregamento ao layout com o objeto Spinner. Normalmente, isso é feito no layout XML com um elemento <Spinner>. Exemplo:

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

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

As principais classes são as seguintes:

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 ícone de carregamento 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 no Activity ou no Fragment para passar uma matriz ao ícone de carregamento usando uma instância de ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.spinner)
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // 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.adapter = adapter
}

Java

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 ícone de carregamento. O layout do simple_spinner_item é fornecido pela plataforma e é o layout padrão que deve ser usado, a menos que você queira definir seu próprio layout da aparência do ícone de carregamento.

Nesse caso, chame setDropDownViewResource(int) para especificar o layout a ser usado pelo adaptador para exibir a lista de opções do ícone de carregamento (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 de item selecionado.

Para definir o gerenciador do evento de seleção para um ícone de carregamento, 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:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback
    }
}

Java

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 callback onItemSelected() e onNothingSelected().

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

Kotlin

val spinner: Spinner = findViewById(R.id.spinner)
spinner.onItemSelectedListener = this

Java

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

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