Android Studio, Spinner igual é exibido numa Activity, mas em outra não

Gente do céu… Só pode ser macumba!

Seguinte: Tenho um Spinner na Activity InserirAluno. Este mesmo Spinner (igual tanto no XML quando na programação na Activity em java) está em InserirMatricula. Em InserirAluno ele é exibido, mas em InserirMatricula NÃO! Crêia! Já vasculhei tudo, foi ctrl C, ctrl V mesmoooo. Tudo igual. Segue o XML e a Activity:

XML DE InserirAluno:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Aluno.InserirAluno">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/cor_preta">

// ADIMITA A EXISTÊNCIA DO textInputLayout10 e titulo_turmas, NÃO COLOQUEI TUDO POR CAUSA DA LIMITAÇÃO DE CARACTERES DO GUJ

                <Spinner
                    android:id="@+id/spinner_turmas"
                    style="@style/spinner_style"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:background="@color/cor_azul_claro"
                    app:layout_constraintEnd_toEndOf="@+id/textInputLayout10"
                    app:layout_constraintStart_toStartOf="@+id/textInputLayout10"
                    app:layout_constraintTop_toBottomOf="@+id/titulo_turmas"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

XML DE InserirMatricula:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Matriculas.MatriculaEfetuada.InserirMatricula">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/cor_preta">

                <Spinner
                    android:id="@+id/spinner_turmas"
                    style="@style/spinner_style"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:background="@color/cor_azul_claro"
                    android:layout_marginTop="30dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

NA ACTIVITY DE InserirAluno:

// ATRIBUTOS
    Spinner spTurmas;
    ArrayList<String> arrayListNomeTurma;
    ArrayAdapter<String> arrayAdapterTurmas;

// NO onCreate
`spTurmas = findViewById(R.id.spinner_turmas);`

// NO MÉTODO:
    /**
     * =================================================================================
     * <MÉTODO EM QUE IMPLEMENTA O SPINNER DA Turma E RETORNA O NOME DE UMA Turma VÁLIDA
     * =================================================================================
     */
    public void spinnerTurmas(){
        // LISTA DE Turmas
        Cursor resultado = banco.listarTurmasBanco();// Chamada do método listarTurmasBanco() que lista as Turmas cadastradas no Banco de Dados

        if(resultado.getCount() == 0){
            /**===============================================================================================
             * <NÃO PRECISA EXIBIR NADA, POIS JÁ SERÁ EXIBIDO O -- Selecione uma Turma -- NO SPINNER DA Turma.
             * <SE NÃO TIVER ESSA LINHA NO CÓDIGO, DÁ ERRO QUANDO NÃO TIVER NENHUMA Turma CADASTRADA
             * =============================================================================================*/
        }
        else{
            arrayListNomeTurma = new ArrayList<>();// INSTÂNCIA DO ARRAYLIST arrayListNomeTurma
            arrayListNomeTurma.add(0, "-- Selecione uma Turma --");// AQUI É ADICIONADO O PRIMEIRO NOME NO PRIMEIRO ÍNDICE DO ARRAYLIST arrayListNomeTurma. O NOME É -- Selecione uma Turma --

            while(resultado.moveToNext()){
                String idTurma = resultado.getString(resultado.getColumnIndex("ID_TURMA"));
                String nomeTurma = resultado.getString(resultado.getColumnIndex("NOME_TURMA"));
                int limiteAlunos = resultado.getInt(resultado.getColumnIndex("LIMITE_ALUNOS"));
                String horarioCadastro = resultado.getString(resultado.getColumnIndex("HOR_CAD_TURMA"));
                String fkHorario = resultado.getString(resultado.getColumnIndex("FK_HORARIO_TURMA"));

                turma = new Turma(idTurma, nomeTurma, limiteAlunos, horarioCadastro, fkHorario);// INSTÂNCIA DE UMA Turma
                arrayListNomeTurma.add(turma.getNomeTurma());// INSERE O NOME DA Turma NO ARRAY DE NOMES DE Turmas
                arrayAdapterTurmas = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, arrayListNomeTurma);// INSTÂNCIA DO arrayAdapterNomesTurmas PASSANDO O ARRAYLIST arrayListNomeTurma EM SEU PARÂMETRO
                spTurmas.setAdapter(arrayAdapterTurmas);// O ADAPTER DO SPINNER Turma É SETADO PASSANDO O ARRAYADAPTER arrayAdapterNomesTurmas

                // SELEÇÃO DA Turma CLICADA
                spTurmas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l){
                        stNomeTurma = arrayListNomeTurma.get(i);// NOME DA Turma SELECIONADA NO SPINNER. i é a posição do item clicado

                        /**================================================================= I M P O R T A N T E =======================================================================================
                         * <COMO O NOME DA PRIMEIRA Turma DO ARRAYLIST arrayListNomeTurma É -- Selecione uma Turma -- E NÃO HÁ Turma CADASATRADA COM ESSE NOME, ENTÃO A Turma É null.
                         * <É PRECISO TRATAR O NOME -- Selecione uma Turma -- E DEPOIS TRATAR A PRIMEIRA Turma QUE É null.
                         * <APÓS TRATAR O NOME -- Selecione uma Turma --, A Turma É CONSULTADA NO BANCO DE DADOS E, DEPOIS DE TRATAR A Turma null, O MÉTODO RETORNA O NOME DE UMA Turma DIFERENTE DE null
                         * ============================================================================================================================================================================*/

                        if(stNomeTurma.equals("-- Selecione uma Turma --")){
                            /**===================================================================================================
                             * <NESTE if É TRATADO O PRIMEIRO NOME DO ARRAYLIST arrayListNomeTurma QUE É -- Selecione uma Turma --
                             * <ESTE NOME NÃO É DE UMA Turma VÁLIDA, ENTÃO O NOME RECEBE O VALOR null
                             * =================================================================================================*/
                            stNomeTurma = null;
                        }
                        else{
                            /**=======================================================================================================================
                             * <AQUI É FEITA A CONSULTA NO BANCO DE DADOS PELA Turma. A PRIMEIRA Turma (CUJO NOME É -- Selecione uma Turma --) É null.
                             * <A CONSULTA DA Turma NÃO PODE SER FEITA ANTES DE VERIFICAR O PRIMEIRO ÍNCICE DO
                             * <NOME DA Turma QUE É -- Selecione uma Turma -- POIS ESSE NOME NÃO É UMA Turma VÁLIDA
                             * =====================================================================================================================*/
                            turma = banco.consultarTurmaPeloNomeBanco(stNomeTurma);

                            // QUANDO Turma FOR null, É POR QUE SE TRATA DA Turma CUJO NOME É -- Selecione uma Turma -- OU A PRIMEIRA Turma E ELA NÃO FOI CADASTRADA, ELA NÃO EXISTE, SEU VALOR É null
                            if(turma == null){
                                // NESSE CASO O APP NÃO ESBOÇA NENHUMA AÇÃO, MAS ESSA VERIFICAÇÃO É NECESSÁRIA PARA QUE NÃO SE TRABALHE COM A Turma null
                            }
                            else{
                                stNomeTurma = turma.getNomeTurma();// stNomeTurma RECEBE O NOME DA Turma SELECIONADA DEPOIS DELA TER SIDO CONSULTADA E VERIFICADA SE É null OU NÃO
                                //                                listarAlunos(stNomeTurma);
                            }
                        }
                    }

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

                    }
                });
            }
        }
    }

NA ACTIVITY DE InserirMatricula:

// ATRIBUTOS
Spinner spTurmas;
ArrayList<String> arrayListNomeTurma;
ArrayAdapter<String> arrayAdapterTurmas;

// NO onCreate:
spTurmas = findViewById(R.id.spinner_turmas);

// NO MÉTODO:
    /**
     * =================================================================================
     * <MÉTODO EM QUE IMPLEMENTA O SPINNER DA Turma E RETORNA O NOME DE UMA Turma VÁLIDA
     * =================================================================================
     */
    public void spinnerTurmas(){
        // LISTA DE Turmas
        Cursor resultado = banco.listarTurmasBanco();// Chamada do método listarTurmasBanco() que lista as Turmas cadastradas no Banco de Dados

        if(resultado.getCount() == 0){
            /**===============================================================================================
             * <NÃO PRECISA EXIBIR NADA, POIS JÁ SERÁ EXIBIDO O -- Selecione uma Turma -- NO SPINNER DA Turma.
             * <SE NÃO TIVER ESSA LINHA NO CÓDIGO, DÁ ERRO QUANDO NÃO TIVER NENHUMA Turma CADASTRADA
             * =============================================================================================*/
        }
        else{
            arrayListNomeTurma = new ArrayList<String>();// INSTÂNCIA DO ARRAYLIST arrayListNomeTurma
            arrayListNomeTurma.add(0, "-- Selecione uma Turma --");// AQUI É ADICIONADO O PRIMEIRO NOME NO PRIMEIRO ÍNDICE DO ARRAYLIST arrayListNomeTurma. O NOME É -- Selecione uma Turma --

            while(resultado.moveToNext()){
                String idTurma = resultado.getString(resultado.getColumnIndex("ID_TURMA"));
                String nomeTurma = resultado.getString(resultado.getColumnIndex("NOME_TURMA"));
                int limiteAlunos = resultado.getInt(resultado.getColumnIndex("LIMITE_ALUNOS"));
                String horarioCadastro = resultado.getString(resultado.getColumnIndex("HOR_CAD_TURMA"));
                String fkHorario = resultado.getString(resultado.getColumnIndex("FK_HORARIO_TURMA"));

                turma = new Turma(idTurma, nomeTurma, limiteAlunos, horarioCadastro, fkHorario);// INSTÂNCIA DE UMA Turma
                arrayListNomeTurma.add(turma.getNomeTurma());// INSERE O NOME DA Turma NO ARRAY DE NOMES DE Turmas
                arrayAdapterTurmas = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, arrayListNomeTurma);// INSTÂNCIA DO arrayAdapterNomesTurmas PASSANDO O ARRAYLIST arrayListNomeTurma EM SEU PARÂMETRO
                spTurmas.setAdapter(arrayAdapterTurmas);// O ADAPTER DO SPINNER Turma É SETADO PASSANDO O ARRAYADAPTER arrayAdapterNomesTurmas

                // SELEÇÃO DA Turma CLICADA
                spTurmas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l){
                        stNomeTurma = arrayListNomeTurma.get(i);// NOME DA Turma SELECIONADA NO SPINNER. i é a posição do item clicado

                        /**================================================================= I M P O R T A N T E =======================================================================================
                         * <COMO O NOME DA PRIMEIRA Turma DO ARRAYLIST arrayListNomeTurma É -- Selecione uma Turma -- E NÃO HÁ Turma CADASATRADA COM ESSE NOME, ENTÃO A Turma É null.
                         * <É PRECISO TRATAR O NOME -- Selecione uma Turma -- E DEPOIS TRATAR A PRIMEIRA Turma QUE É null.
                         * <APÓS TRATAR O NOME -- Selecione uma Turma --, A Turma É CONSULTADA NO BANCO DE DADOS E, DEPOIS DE TRATAR A Turma null, O MÉTODO RETORNA O NOME DE UMA Turma DIFERENTE DE null
                         * ============================================================================================================================================================================*/

                        if(stNomeTurma.equals("-- Selecione uma Turma --")){
                            /**===================================================================================================
                             * <NESTE if É TRATADO O PRIMEIRO NOME DO ARRAYLIST arrayListNomeTurma QUE É -- Selecione uma Turma --
                             * <ESTE NOME NÃO É DE UMA Turma VÁLIDA, ENTÃO O NOME RECEBE O VALOR null
                             * =================================================================================================*/
                        }
                        else{
                            /**=======================================================================================================================
                             * <AQUI É FEITA A CONSULTA NO BANCO DE DADOS PELA Turma. A PRIMEIRA Turma (CUJO NOME É -- Selecione uma Turma --) É null.
                             * <A CONSULTA DA Turma NÃO PODE SER FEITA ANTES DE VERIFICAR O PRIMEIRO ÍNCICE DO
                             * <NOME DA Turma QUE É -- Selecione uma Turma -- POIS ESSE NOME NÃO É UMA Turma VÁLIDA
                             * =====================================================================================================================*/
                            turma = banco.consultarTurmaPeloNomeBanco(stNomeTurma);

                            // QUANDO Turma FOR null, É POR QUE SE TRATA DA Turma CUJO NOME É -- Selecione uma Turma -- OU A PRIMEIRA Turma E ELA NÃO FOI CADASTRADA, ELA NÃO EXISTE, SEU VALOR É null
                            if(turma == null){
                                // NESSE CASO O APP NÃO ESBOÇA NENHUMA AÇÃO, MAS ESSA VERIFICAÇÃO É NECESSÁRIA PARA QUE NÃO SE TRABALHE COM A Turma null
                            }
                            else{
                                stNomeTurma = turma.getNomeTurma();// stNomeTurma RECEBE O NOME DA Turma SELECIONADA DEPOIS DELA TER SIDO CONSULTADA E VERIFICADA SE É null OU NÃO
                                //listarAlunos(stNomeTurma);
                            }
                        }
                    }

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

                    }
                });
            }
        }
    }

Já tive o mesmo problema com o ImageView, em InserirAluno eu consigo enviar ela de uma activity pra outra, mas em outra classe implementado do mesmo jeito, ela não vai nem sob tortura.

Alguém pra mostrar o jogo dos 7 erros?

Desde já mt obg!!!

Alguém??

pq vc deixa essas cores gritantes no seu layout? Testei e fiz aparecer, mas tive que mudar algumas coisas…

Como eu nao sei como está o seu styles, a minha setinha não está aparecendo, só se tirar o background do spinner.

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#252526">

        <Spinner
            android:id="@+id/spinner_turmas"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_margin="30dp"
            android:background="#333337"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

O Spinner tava com a altura completa, de ponta a ponta na vertical, se for fazer isso, coloca uma margem pelo menos, pra dar uma suavizada no layout:

orochimaru, independente da cor do background no constraintlayout, na InserirAluno eu consigo ver o spinner normalmente, ele tem seu background de cor azul clara, vejo ele normalmente, está assim:


Vc não está vendo a setinha provavelmente por causa do backbground. Por ter mudado a cor, vc passou a vê-la.

O Style (peguei pronto da net msm, não vou mentir! e funicona) tá assim:

<style name="spinner_style">
    <item name="android:paddingLeft">0dp</item>
    <item name="android:dropDownWidth">533dp</item>
    <item name="android:showDividers">none</item>
    <item name="android:dividerHeight">0dp</item>
    <item name="android:dropDownHeight">70dp</item>
    <item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
    <item name="android:dropDownSelector">#CBCFDF</item>
</style>

Não tô preocupada com cores, eu só quero saber oq está acontecendo que EM UMA ACTIVITY ELE APARECE, MAS EM OUTRA CONFIGURADO DA MESMA FORMA, NÃO DÁ PRA VER. Nossa… eu fico pra parir um minino. Já aconteceu isso com o mageView também, já fiz um tópico pra ela e até hj o mistério reina. Não sei se é bug do Android Studio… enfim.

A cor foi apenas um comentario mesmo, é que é como eu sempre digo pra vc, infelizmente tem coisas que a gente tem que botar a mão na massa mesmo.

Só ver não adianta muito, há muita coisa envolvida, e como vc não curte o team viewer fica um pouco dificil.

A tela que não aparece, isso acontece no AndroidStudio e no celular ou só no AndroidStudio?

Só no celular.

tá, já testou em outro celular?

Não, mas não sei o pq ele abriria em outro celular e neste que uso não. Vou testar em outro e ja te falo, mas provavelmente vai ser a mesma coisa.

As vezes é coisa de layout mesmo, esse layout que vc usa é bem chatinho…

orochimaru, não tem como ser coisa de layout, pois eles estão IGUAIS, ctrl C, ctrl V. Minha questão é se é alguma coisa que falta configurar no Android Studio ou coisa do tipo, mas em se tratando de layouts, eles são iguais. Enfim, testei em outro cel, msm coisa.

Não estão tão iguais assim, por isso a dedução, não tem mais o que eu fazer a não ser chutar nesse caso. Como eu disse, é algo pra se por a mão na massa e testar ao vivo

<Spinner
                    android:id="@+id/spinner_turmas"
                    style="@style/spinner_style"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:background="@color/cor_azul_claro"
                    app:layout_constraintEnd_toEndOf="@+id/textInputLayout10"
                    app:layout_constraintStart_toStartOf="@+id/textInputLayout10"
                    app:layout_constraintTop_toBottomOf="@+id/titulo_turmas"/>

        <Spinner
            android:id="@+id/spinner_turmas"
            style="@style/spinner_style"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="@color/cor_azul_claro"
            android:layout_marginTop="30dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

Nossa… vc nem imagina! Peguei o Método da Classe Horario que trabalha o spinner de Horários, e coloquei ele (O Método) no lugar do de Turmas. Rodou :expressionless: Daí peguei as linhas referentes do Método da Turma e coloquei no do Horario, só fiz trocar os nomes das variáveis e o conteúdo da lista, o resto tudo igual, e rodou de novo :expressionless:

Menino, só mudei os nomes das variáveis de A pra B, toda a implementação está IDÊNTICA. Agora Turma tá aparecendo. Então voltei até o ponto em que não estava aparecendo e adivinha? Rodou de novo :expressionless: agora ta aparecendo tudo :expressionless: O que pode ser isso? Vi letra por letra do código, está tudo certo e ele me faz uma m3Rd@ dessas. Já aconteceu com vc/aguém isso?

1 curtida

Faz anos desde a última vez que tive contato com Android, mas lembro que já passei por situações parecidas com a sua, a solução sempre foi um “fusca in, fusca out”, o que não faz muito sentido, mas vida que segue!

2 curtidas

UFA! Já tava achando que era só cmg que tava acontecendo, pense… tudo certinho e o app fazer um troço desses, enfim. O que é “fusca in, fusca out”?

Termo usado na programação para indicar que quando algo não está funcionando, e depois volta a funcionar sem que você modifique o código original!
Se tu não ouviou tu ainda vai ouvir um “já tentou sair do fusca e entrar no fusca de novo?”

1 curtida

kkkkkk

1 curtida

kkkkkk… primeira vez que esculto isso! Sair do fusca… kkk…

Cara, eu nunca nem vi ninguém falar nisso. Mas já é a terceira vez que isso acontece cmg, eu fico pra parir um minino, diga aí.

kkkkkk… primeira vez que esculto isso! “Fusca in, Fusca out” kkk… mt boa!

Tu rir, neh cabra! kkkkk…


Ah! Detalhe:
Como seria exatamente sair do fusca pra depois entrar nele de novo?
Pq o código só rodou quando eu troquei o método por um outro já existente e mt semelhante. Mas se eu não tivesse ele, estaria no erro até agr…!

É pq o fusca da muito problema, então a expressão “Já tentou sair do fusca e entrar de novo?”

Mas só fica na dor de cabeça ou tem alguma coisa a se fazer pra resolver o problema?