Spinner, com opção "Selecione"

4 respostas
java
R

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.

4 Respostas

D

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 --") );
R

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?

D

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:

R

Olá Boa tarde.

Prezado mais uma vez obrigado.

Criado 11 de janeiro de 2016
Ultima resposta 12 de jan. de 2016
Respostas 4
Participantes 2