GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como evitar que o primeiro item do spinner comece selecionado no Android?

Tenho um ListView e dentro de cada item dele carrega um Spinner com algumas informações.

A forma que quero que funcione (Expectativa): A primeira vez que carregar a Activity, apresentar para o usuário uma lista e dentro de cada item dela, possuir um Spinner com as opções para ele escolher. Assim que o usuário escolher, é feito a requisição para o WebService informando os valores.

A forma que esta funcionando (Realidade): O problema é que quando a Activity carrega, o primeiro item do Spinner vem selecionado e com isso faz a requisição para o WebService, se o usuário vai visualizar mais itens da lista, automaticamente vai fazendo requisições. Porque os primeiros itens dos Spinner estão selecionados.

Abaixo as imagens da tela:

activity_menu.xml

MenuActivity.java

public class MenuActivity extends AppCompatActivity implements 
GoogleApiClient.ConnectionCallbacks, LocationListener {   

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
    iniciadorComponente(savedInstanceState);
    iniciadorDados();

    swipeListaAtendimento.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            requisicaoWsListaAtendimento(true);
        }
    });
}


private void iniciadorComponente(Bundle savedInstanceState) {
    swipeListaAtendimento = (SwipeRefreshLayout) findViewById(R.id.swipeListaAtendimento);
    listaAtendimentos = (ListView) findViewById(R.id.listaAtendimentos);
    progressListaAtendimentos = (ProgressBar) findViewById(R.id.progressListaAtendimentos);
    chaveIntegracaoClasse = new ChaveIntegracao();
    databaseHelper = new DatabaseHelper(MenuActivity.this);
    atendimentosDAO = new AtendimentosDAO();

    if (savedInstanceState != null) {
        atendimentos = (ArrayList<Atendimento>) savedInstanceState.getSerializable("listaAtendimento");
    } else {
        atendimentos = new ArrayList<>();
    }
}

private void iniciadorDados() {
    SharedPreferences preferences = getSharedPreferences("USER_INFORMATION", MODE_PRIVATE);
    urlBase = preferences.getString("urlBase", null);
    intervaloCoordenadas = preferences.getString("intervaloCoordenadas", null);


}

@Override
public void onResume() {
    super.onResume();
    requisicaoWsListaAtendimento(false);
    carregaListaAtendimentos();
}

public void carregaListaAtendimentos(){
    atendimentos = atendimentosDAO.listarAtendimento(databaseHelper);
    atendimentoAdapter = new MenuAdapter(atendimentos, MenuActivity.this, posicaoAtualDoUsuario, carregaSpinner);
    listaAtendimentos.setAdapter(atendimentoAdapter);
}

private void requisicaoWsListaAtendimento(boolean queroCarregarListaPeloSwipe){
    if (queroCarregarListaPeloSwipe){
        SharedPreferences preferences = getSharedPreferences("USER_INFORMATION", MODE_PRIVATE);
        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(getResources().getString(R.string.cnpjTeste))); //        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

        DadosAtendimento dadosAtendimento = new DadosAtendimento("guilherme");

        ListaAtendimentos listaAtendimentos1 = new ListaAtendimentos(autenticacao, dadosAtendimento);
        EnvelopeAtendimento envelopeAtendimento = new EnvelopeAtendimento(listaAtendimentos1);

        //chama o retrofit para fazer a requisição no webservice
        EnviarDadosListaAtendimentosCallback enviarDadosListaAtendimentosCallback = new EnviarDadosListaAtendimentosCallback(
                MenuActivity.this,
                progressListaAtendimentos,
                listaAtendimentos,
                urlBase,
                swipeListaAtendimento);
        enviarDadosListaAtendimentosCallback.enviarDadosLista(envelopeAtendimento);
    } else {
        progressListaAtendimentos.setVisibility(View.VISIBLE);
        listaAtendimentos.setVisibility(View.GONE);
        SharedPreferences preferences = getSharedPreferences("USER_INFORMATION", MODE_PRIVATE);
        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(getResources().getString(R.string.cnpjTeste))); //        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

        DadosAtendimento dadosAtendimento = new DadosAtendimento("guilherme");

        ListaAtendimentos listaAtendimentos1 = new ListaAtendimentos(autenticacao, dadosAtendimento);
        EnvelopeAtendimento envelopeAtendimento = new EnvelopeAtendimento(listaAtendimentos1);

        //chama o retrofit para fazer a requisição no webservice
        EnviarDadosListaAtendimentosCallback enviarDadosListaAtendimentosCallback = new EnviarDadosListaAtendimentosCallback(
                MenuActivity.this,
                progressListaAtendimentos,
                listaAtendimentos,
                urlBase,
                swipeListaAtendimento);
        enviarDadosListaAtendimentosCallback.enviarDadosLista(envelopeAtendimento);
    }
}

MenuAdapter.java

public class MenuAdapter extends BaseAdapter {


    public MenuAdapter(List<Atendimento> atendimentos, Activity activity, String posicaoAtualDoUsuario, boolean carregaSpinner) {
        this.atendimentos = atendimentos;
        this.activity = activity;
        this.posicaoAtualDoUsuario = posicaoAtualDoUsuario;
        this.carregaSpinner = carregaSpinner;
    }


    @Override
    public int getCount() {
        return atendimentos.size();
    }

    @Override
    public Object getItem(int position) {
        return atendimentos.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final LayoutInflater inflater = activity.getLayoutInflater();
        final View linha = inflater.inflate(R.layout.item_atendimento, null);

        final Atendimento atendimentos1 = atendimentos.get(position);
        iniciadorComponente(linha);
        iniciadorDados(atendimentos1, linha);


        if (atendimentos1.getSituacaoOS().equals("Na fila")) {
            spnSituacaoItem.setSelection(0);
        } else if (atendimentos1.getSituacaoOS().equals("A caminho")) {
            spnSituacaoItem.setSelection(1);
        } else if (atendimentos1.getSituacaoOS().equals("Em execução")) {
            spnSituacaoItem.setSelection(2);
        } else if (atendimentos1.getSituacaoOS().equals("Pausado")) {
            spnSituacaoItem.setSelection(3);
        } else if (atendimentos1.getSituacaoOS().equals("Concluído")) {
            spnSituacaoItem.setSelection(4);
        } else if (atendimentos1.getSituacaoOS().equals("Abortado")) {
            spnSituacaoItem.setSelection(5);
        }

        // Verificação tempo
        if (atendimentos1.getDuracao().equals("")) {
            imgTempoItem.setVisibility(View.GONE);
            txtTempoItem.setVisibility(View.GONE);
        }

        // Verificação agendamento
        if (atendimentos1.getAgendamento().equals("")) {
            imgAgendamentoItem.setVisibility(View.GONE);
            txtAgendamentoItem.setVisibility(View.GONE);
        }

        // Verificação sla restante
        if (atendimentos1.getSlaFormatado().equals("")) {
            imgSlaItem.setVisibility(View.GONE);
            txtSlaItem.setVisibility(View.GONE);
            txtSlaRestanteItem.setVisibility(View.GONE);
            progressSlaRestante.setVisibility(View.GONE);
        }

        // Verificação progress bar
        if (progressSlaRestante.getProgress() <= 25) {
            progressSlaRestante.setProgressDrawable(linha.getResources().getDrawable(R.drawable.progress_bar_state_green));
        } else if (progressSlaRestante.getProgress() > 25 && progressSlaRestante.getProgress() <= 50) {
            progressSlaRestante.setProgressDrawable(linha.getResources().getDrawable(R.drawable.progress_bar_state_yellow));
        } else if (progressSlaRestante.getProgress() > 50 && progressSlaRestante.getProgress() <= 75) {
            progressSlaRestante.setProgressDrawable(linha.getResources().getDrawable(R.drawable.progress_bar_state_orange));
        } else if (progressSlaRestante.getProgress() > 75) {
            progressSlaRestante.setProgressDrawable(linha.getResources().getDrawable(R.drawable.progress_bar_state_red));
        }


        spnSituacaoItem.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (carregaSpinner) {
                 if (position == 0) {
                     progressDialog = ProgressDialog.show(
                             linha.getContext(),
                             linha.getResources().getString(R.string.aguarde),
                             linha.getResources().getString(R.string.enviandoDados),
                             false,
                             true
                     );
                     progressDialog.setCanceledOnTouchOutside(false);
                     progressDialog.setCancelable(false);


                     new Thread(new Runnable() {
                         @Override
                         public void run() {
                             try {
                                 Thread.sleep(1000);

                                 handler.post(new Runnable() {
                                     @Override
                                     public void run() {
                                         Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(linha.getResources().getString(R.string.cnpjTeste)));
//                                        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

                                         DadosOS dadosOS = new DadosOS(atendimentos1.getNumero(), usuario, situacaoAnterior, "A", dataFormatada);

                                         AlteraSituacaoOs alteraSituacaoOs = new AlteraSituacaoOs(autenticacao, dadosOS);
                                         EnvelopeSituacaoOs envelopeSituacaoOs = new EnvelopeSituacaoOs(alteraSituacaoOs);

                                         //chama o retrofit para fazer a requisição no webservice
                                         EnviarSituacaoOsCallback enviarSituacaoOsCallback = new EnviarSituacaoOsCallback(
                                                 linha.getContext(),
                                                 progressDialog,
                                                 urlBase);
                                         enviarSituacaoOsCallback.enviarDadosOs(envelopeSituacaoOs);
                                     }
                                 });
                             } catch (Exception e) {
                                 e.printStackTrace();
                             } finally {
                                 progressDialog.dismiss();
                             }
                         }
                     }).start();
                     carregaSpinner = false;
                 } else if (position == 1) {
                    progressDialog = ProgressDialog.show(
                            linha.getContext(),
                            linha.getResources().getString(R.string.aguarde),
                            linha.getResources().getString(R.string.enviandoDados),
                            false,
                            true
                    );
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.setCancelable(false);


                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000);

                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(linha.getResources().getString(R.string.cnpjTeste)));
//                                        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

                                        DadosOS dadosOS = new DadosOS(atendimentos1.getNumero(), usuario, situacaoAnterior, "A", dataFormatada);

                                        AlteraSituacaoOs alteraSituacaoOs = new AlteraSituacaoOs(autenticacao, dadosOS);
                                        EnvelopeSituacaoOs envelopeSituacaoOs = new EnvelopeSituacaoOs(alteraSituacaoOs);

                                        //chama o retrofit para fazer a requisição no webservice
                                        EnviarSituacaoOsCallback enviarSituacaoOsCallback = new EnviarSituacaoOsCallback(
                                                linha.getContext(),
                                                progressDialog,
                                                urlBase);
                                        enviarSituacaoOsCallback.enviarDadosOs(envelopeSituacaoOs);
                                    }
                                });
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                progressDialog.dismiss();
                            }
                        }
                    }).start();
                } else if (position == 2) {
                    progressDialog = ProgressDialog.show(
                            linha.getContext(),
                            linha.getResources().getString(R.string.aguarde),
                            linha.getResources().getString(R.string.enviandoDados),
                            false,
                            true
                    );
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.setCancelable(false);


                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000);

                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(linha.getResources().getString(R.string.cnpjTeste)));
//                                        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

                                        DadosOS dadosOS = new DadosOS(atendimentos1.getNumero(), usuario, situacaoAnterior, "E", dataFormatada);

                                        AlteraSituacaoOs alteraSituacaoOs = new AlteraSituacaoOs(autenticacao, dadosOS);
                                        EnvelopeSituacaoOs envelopeSituacaoOs = new EnvelopeSituacaoOs(alteraSituacaoOs);

                                        //chama o retrofit para fazer a requisição no webservice
                                        EnviarSituacaoOsCallback enviarSituacaoOsCallback = new EnviarSituacaoOsCallback(
                                                linha.getContext(),
                                                progressDialog,
                                                urlBase);
                                        enviarSituacaoOsCallback.enviarDadosOs(envelopeSituacaoOs);
                                    }
                                });
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                progressDialog.dismiss();
                            }
                        }
                    }).start();
                } else if (position == 3) {
                    progressDialog = ProgressDialog.show(
                            linha.getContext(),
                            linha.getResources().getString(R.string.aguarde),
                            linha.getResources().getString(R.string.enviandoDados),
                            false,
                            true
                    );
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.setCancelable(false);


                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000);

                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(linha.getResources().getString(R.string.cnpjTeste)));
//                                        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

                                        DadosOS dadosOS = new DadosOS(atendimentos1.getNumero(), usuario, situacaoAnterior, "P", dataFormatada);

                                        AlteraSituacaoOs alteraSituacaoOs = new AlteraSituacaoOs(autenticacao, dadosOS);
                                        EnvelopeSituacaoOs envelopeSituacaoOs = new EnvelopeSituacaoOs(alteraSituacaoOs);

                                        //chama o retrofit para fazer a requisição no webservice
                                        EnviarSituacaoOsCallback enviarSituacaoOsCallback = new EnviarSituacaoOsCallback(
                                                linha.getContext(),
                                                progressDialog,
                                                urlBase);
                                        enviarSituacaoOsCallback.enviarDadosOs(envelopeSituacaoOs);
                                    }
                                });
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                progressDialog.dismiss();
                            }
                        }
                    }).start();

                } else if (position == 4) {
                    progressDialog = ProgressDialog.show(
                            linha.getContext(),
                            linha.getResources().getString(R.string.aguarde),
                            linha.getResources().getString(R.string.enviandoDados),
                            false,
                            true
                    );
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.setCancelable(false);


                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(1000);

                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        Autenticacao autenticacao = new Autenticacao(chaveIntegracaoClasse.criarChaveIntegracao(linha.getResources().getString(R.string.cnpjTeste)));
//                                        DadosAtendimento dadosAtendimento = new DadosAtendimento(preferences.getString("nome", null));

                                        DadosOS dadosOS = new DadosOS(atendimentos1.getNumero(), usuario, situacaoAnterior, "C", dataFormatada);

                                        AlteraSituacaoOs alteraSituacaoOs = new AlteraSituacaoOs(autenticacao, dadosOS);
                                        EnvelopeSituacaoOs envelopeSituacaoOs = new EnvelopeSituacaoOs(alteraSituacaoOs);

                                        //chama o retrofit para fazer a requisição no webservice
                                        EnviarSituacaoOsCallback enviarSituacaoOsCallback = new EnviarSituacaoOsCallback(
                                                linha.getContext(),
                                                progressDialog,
                                                urlBase);
                                        enviarSituacaoOsCallback.enviarDadosOs(envelopeSituacaoOs);
                                    }
                                });
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                progressDialog.dismiss();
                            }
                        }
                    }).start();

                }
                } else {
                    if (spnSituacaoItem.isInEditMode()){
                        carregaSpinner = true;
                    }
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });


        linha.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent itDetalheAtendimento = new Intent(v.getContext(), DetalheAtendimentoActivity.class);
                itDetalheAtendimento.putExtra("atendimento", atendimentos1);
                itDetalheAtendimento.putExtra("posicaoAtualUsuario", posicaoAtualDoUsuario);
                v.getContext().startActivity(itDetalheAtendimento);
            }
        });

        return linha;
    }

    private void iniciadorComponente(View linha) {
        txtPrioridadeItem = (TextView) linha.findViewById(R.id.txtPrioridadeItem);
        txtNomeItem = (TextView) linha.findViewById(R.id.txtNomeItem);
        txtSituacaoClienteItem = (TextView) linha.findViewById(R.id.txtSituacaoClienteItem);
        txtProtocoloItem = (TextView) linha.findViewById(R.id.txtProtocoloItem);
        imgEnderecoItem = (ImageView) linha.findViewById(R.id.imgEnderecoItem);
        txtEnderecoItem = (TextView) linha.findViewById(R.id.txtEnderecoItem);
        imgTopicoItem = (ImageView) linha.findViewById(R.id.imgTopicoItem);
        txtTopicoItem = (TextView) linha.findViewById(R.id.txtTopicoItem);
        imgTempoItem = (ImageView) linha.findViewById(R.id.imgTempoItem);
        txtTempoItem = (TextView) linha.findViewById(R.id.txtTempoItem);
        imgAgendamentoItem = (ImageView) linha.findViewById(R.id.imgAgendamentoItem);
        txtAgendamentoItem = (TextView) linha.findViewById(R.id.txtAgendamentoItem);
        imgSlaItem = (ImageView) linha.findViewById(R.id.imgSlaItem);
        txtSlaItem = (TextView) linha.findViewById(R.id.txtSlaItem);
        txtSlaRestanteItem = (TextView) linha.findViewById(R.id.txtSlaRestanteItem);
        progressSlaRestante = (ProgressBar) linha.findViewById(R.id.progressSlaRestante);
        spnSituacaoItem = (Spinner) linha.findViewById(R.id.spnSituacaoItem);
    }

    private void iniciadorDados(Atendimento atendimentos1, View linha){
        SharedPreferences preferences = linha.getContext().getSharedPreferences("USER_INFORMATION", linha.getContext().MODE_PRIVATE);
        long prioridade = atendimentos1.getOrdemPrioridade();
        long protocolo = atendimentos1.getProtocolo();
        String em = "em ";
        String hrs = " hrs";

        urlBase = preferences.getString("urlBase", null);
        usuario = preferences.getString("usuario", null);
        dataFormatada = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());

        txtPrioridadeItem.setText(String.valueOf(prioridade));
        txtNomeItem.setText(atendimentos1.getCliente());
        txtSituacaoClienteItem.setText(atendimentos1.getSituacaoCliente());
        txtProtocoloItem.setText(String.valueOf(protocolo));
        txtEnderecoItem.setText(atendimentos1.getEndereco());
        txtTopicoItem.setText(atendimentos1.getTopico());
        txtTempoItem.setText(em + atendimentos1.getDuracao() + hrs);
        txtAgendamentoItem.setText(atendimentos1.getAgendamento());
        txtSlaRestanteItem.setText(atendimentos1. getSlaFormatado());
        progressSlaRestante.setMax(100);
        progressSlaRestante.setProgress(60);
        progressSlaRestante.setProgressDrawable(linha.getResources().getDrawable(R.drawable.progress_bar_states));
        SpinnerAdapter spinnerAdapter = new SpinnerAdapter(linha.getContext(),icImagem, situacoes);
        spnSituacaoItem.setAdapter(spinnerAdapter);
    }
}

não sei se funciona, mas testa
objetoSpiner.setSelection(-1);

-1 não funciona :X

Alison não sei se conseguiu mas para ficar registrado coloquei
o setSelection(0,false); e funcionou perfeitamente estava com o mesmo problema.

                ArrayAdapter<Unidade> arrayAdapter = new ArrayAdapter<>(CadastroUnidade.this, android.R.layout.simple_spinner_dropdown_item,unidadeModArrayList);
                arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                unidSpinner.setAdapter(arrayAdapter);
                **unidSpinner.setSelection(0,false);**
                unidSpinner.setOnItemSelectedListener
//