Spinner, com opção "Selecione"

Boa tarde.

Prezados já existe aqui Topicos sobre este tema, mais eu não consegui entender muito bem por isto gostaria de perguntar aos senhores novamente mais expondo também minha solução, a questão principal é esta é a melhor forma? eu não encontrei muitos exemplos sobre isto, na verdade não encontrei nenhum.

Então como diz o titulo eu preciso que o Spinner não apareça com a primeira opção selecionada ( a não ser se o usuário estiver alterando um registro e logico neste caso o spinner tem de já setar o item ), então para que apareça a opção " Selecione um registro" eu fiz da seguinte forma

uso uma classe que se comunica com o dao e nesta uma função que busca os produtos, e um for para percorrer a lista preenchendo outra lista que será retornada

'
public List getListaProdutos() {

    String sqlComm = "select * from produto order by pro_produto";

    List<Produto> lista = new ArrayList<>();

    lista.add(new Produto(0,"-- Selecione um produto --"));

    List<Produto> produtos = dao.recuperarPorQuery(sqlComm);

    for(int i=0; i < produtos.size(); i++) {
        Produto p = produtos.get(i);
        lista.add(p);
    }

    return lista;
}'

Agradeço aos comentários.

Quando precisei utilizar a mensagem de selecione no spinner eu fiz dessa mesma forma que você apresentou.

Só um detalhe é que vc não precisa iterar toda a lista novamente, basta inserir o seu produto “Selecione um produto” no indice 0 da lista que já é retornada do seu dao.

List<Produto> produtos = dao.recuperarPorQuery(sqlComm);
lista.add( 0, new Produto(0,"-- Selecione um produto --") );

Olá Diego boa noite.

Meu caro obrigado novamente por mais esse comentário, bem então deixa eu te indagar sobre o comportamento do spinner, o primeiro item esta como desejamos mais, seria ideal que este item sumisse assim que o usuário interagisse com o spinner, tem uma dica de como fazer isto?

Eu sinceramente não vejo necessidade de remover esse item, pois basta efetuar um tratamento para verificar se esse item está selecionado.

Mas você pode fazer o seguinte

Spinner spn = (Spinner) findViewById(R.id.spinner);
List<Produto> produtos = dao.recuperarPorQuery(sqlComm);
lista.add( 0, new Produto(0,"-- Selecione um produto --") );
//cria e adiciona o adapter
Adapter adapter = new Adapter(getApplicationContext(), produtos);
spn.setAdapter(adapter);
//adicioana o listener para quando um item for selecionado
spn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //obtem o produto selecionado no spinner
        produto = (Produto) parent.getAdapter().getItem(position);
        //aqui você remove o cara que te encomoda
        produtos.remove(0);
        //então você deve atualizar a lista de produtos no seu adapter
        adapter.setProdutos(produtos);
        //e finalmente é preciso avisar o nosso amigo adapter que seus dados foram atualizados
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        //Todo
    }
  }
});

vale lembrar que vocêdeve implementar o metodo setProduto(List produtos) no seu adapter;

ae não tem erro :wink:

1 curtida

Olá Boa tarde.

Prezado mais uma vez obrigado.