Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Problema com criação de Menu

Estou com problema na criação de Menus, fiz tudo conforme ensinado na vídeo aula e quando executo a aplicação, não aparece o meu menu.

Segue código testado:

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_lista_alunos, menu); return super.onCreateOptionsMenu(menu); }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listagem_alunos);

    ListView lista = (ListView) findViewById(R.id.lista);

    final String[] alunos = {"Isabela", "Gustavo", "Ana Luiza"};

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, alunos);

    lista.setAdapter(adapter);

    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
            Toast.makeText(ListaAlunosActivity.this, "A posição é " + position, Toast.LENGTH_SHORT).show();
        }
    });

    lista.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
            Toast.makeText(ListaAlunosActivity.this, "Aluno clicado é: " + adapter.getItemAtPosition(position), Toast.LENGTH_SHORT).show();
            return true;
        }
    });
}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.novo:
            Intent irParaFormulario = new Intent(this, FormularioActivity.class);
            startActivity(irParaFormulario);
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}
10 respostas

Olá Gustavo, tudo bem? Realizei um teste com seu código e rodou normalmente, tente realizar os passos por partes para você identificar o erro, primeiro executa a lista, depois o menu e por ultimo a intent. Bons estudos.

Olá Mihael, tudo bem e contigo?

Obrigado pelas informações, verifiquei em outro tópico que se eu comentasse a linha da XML AndroidManifest eu conseguiria, fiz o teste e realmente deu certo, o problema é que muda totalmente o estilo da aplicação.

Verifiquei em outros posts no forum a opção de usar app:showAsAction="always" ao inves de usar android:showAsAct...

Estou fazendo alguns testes, no momento estou com problema na aula de persistencia com SQLite, estou procurando no forum alguem que ja tenha passado por isso, mas minha aplicação não está rodando mais.

Agradeço a ajuda, vou fazer uns testes assim que descobrir como arrumar este problema e informo se foi resolvido ou não.

Tranquilo Gustavo, no tópico onde você está, no AndroidManifest é configurado as activity, talvez você tenha esquecido de colocar a activity do formulário e com isso não era realizado a intent de maneira correta.

Consegui resolver o meu problema com a aula de persistência, era um return que estava errado, já arrumei. Fiz alguns testes no menu novamente, usando as dicas de outra pessoa e mesmo assim não deu certo, coloquei vários logs para verificar até qual ponto está indo o código, quando eu comento a linha android:theme="@style/AppTheme" do AndroidManifest ele executa tudo, abre o onCreate, em seguinda o onCreateOptionsMenu, funciona tudo, quando eu deixo esta linha android:theme="@style/AppTheme"> ele apenas executa o metodo onCreate e para por ai. Não aparece nenhum menu, nem o nome do programa, apenas a lista de alunos.

Meu arquivo manifest está assim: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.com.gusta.cadastrocaelum">

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name="br.com.gusta.cadastrocaelum.cadastro.ListaAlunosActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name="br.com.gusta.cadastrocaelum.cadastro.FormularioActivity">

    </activity>

</application>

Gustavo, caso sua dúvida foi sanada, selecione a opção "Marcar como solução". Obrigado e bons estudos.

Ainda não foi Mihael, só está funcionando quando eu comento a linha: android:theme="@style/AppTheme", desta forma a aplicação fica toda preta, muda tudo o tema.

O AndroidManifest está pegando o AppTheme do arquivo xml style dentro da pasta values onde se encontra a pasta res. Eu tive um problema neste arquivo quando surgiu a API 23. Eu criava um projeto e o eclipse automaticamente criava outro chamado appcompat_v7. Ele serve para deixar o projetos antigos compatíveis com os novos e com isso, sempre era mostrado um erro nesse arquivo style.xml e não sabia o motivo. Pesquisei bastante e a solução que encontrei foi de alterar alguns parâmetros dentro desse arquivo. Colocava o valor do atributo parent igual ao name. Ex: name="AppBaseTheme". Não sei se você está passando por algo parecido, mas tenta dar atenção a esse arquivo style.xml. Qualquer coisa, avisa.

solução!

Consegui resolver estendendo outra classe Activity ActionBarActivity

Fonte: http://stackoverflow.com/questions/29257315/action-bar-can-not-be-seen-when-applying-style-base-theme-appcompat-light-darka

Obrigado vou testar e aviso. Muito obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software