Adicionar ícones de carregamento ao app

Os controles giratórios oferecem uma forma rápida de selecionar um valor de um conjunto. Na configuração padrão, estado, um ícone de carregamento vai mostrar o valor selecionado. Tocar no ícone de carregamento exibe um menu mostrando todos os outros valores que o usuário pode selecionar.

Figura 1. Um menu em um ícone de carregamento que mostra as opções e a distribuição dos valores dos dados.

É possível adicionar um ícone de carregamento ao layout com o Spinner objeto, o que normalmente é feito no layout XML com uma <Spinner>. Isso é mostrado 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, especifique uma SpinnerAdapter no seu Activity ou Fragment o código-fonte.

Se você estiver usando componentes do Material Design, expostos menus suspensos são equivalentes a uma Spinner.

Preencher o ícone de carregamento com as escolhas do usuário

As opções fornecidas para o ícone de carregamento podem vir de qualquer fonte, mas você precisa fornecê-las usando um SpinnerAdapter, como ArrayAdapter se as opções estiverem disponíveis em uma matriz ou um CursorAdapter se as opções estão disponíveis em uma consulta ao banco de dados.

Por exemplo, se as opções disponíveis para o ícone de carregamento forem predeterminadas, é possível fornecer uma matriz de strings definida em um recurso de string arquivo:

<?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 seguinte código no seu Activity ou Fragment para fornecer ao ícone de carregamento o usando uma instância de ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.planets_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.planets_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);

A createFromResource() permite criar um ArrayAdapter usando a matriz de strings. A o terceiro argumento para esse método é um recurso de layout que define como o escolha selecionada aparece no controle giratório. A plataforma oferece simple_spinner_item o mesmo layout organizacional. Esse é o layout padrão, a menos que você queira definir seu próprio layout para a aparência do ícone de carregamento.

Ligação setDropDownViewResource(int) para especificar o layout que o adaptador usa para exibir a lista de opções do ícone de carregamento. simple_spinner_dropdown_item é outro layout padrão definido pela plataforma.

Ligação setAdapter() para aplicar o adaptador ao Spinner.

Responder às seleções do usuário

Quando o usuário seleciona um item no menu do ícone de carregamento, o Spinner objeto recebe um evento selecionado no item.

Para definir o manipulador de eventos de seleção para um ícone de carregamento, implemente o AdapterView.OnItemSelectedListener e a interface de usuário onItemSelected() método de callback. Por exemplo, esta é uma implementação da interface em uma Activity:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    ...
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item is 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 is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

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

A A interface AdapterView.OnItemSelectedListener exige a onItemSelected() e onNothingSelected() métodos de callback.

Especifique a implementação da interface chamando setOnItemSelectedListener():

Kotlin

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

Java

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

Se você implementar o AdapterView.OnItemSelectedListener interface com Activity ou Fragment, como no exemplo anterior, transmita this como a instância de interface.