14
respostas

Estou com dúvida no curso de Android: Aplicações e armazenamento de dados - Parte 1, no exercício 6 do capítulo Tela de cadastro.

Meu menu não aparece, nem no emulador nem no aparelho, segui todos os passos do video, aconteceu isto com alguem?

14 respostas

Pode postar o código da activity e o layout?

/* activity registerForContextMenu(lista);//avisa ao android para abrir menu de opcoes, este será aberto ao dar um click longo no item da lista //chamando o onCreateContextMenu() //lista.setOnClickListener(l);neste casa trato um click na lista toda lista.setOnItemClickListener(new OnItemClickListener() { //ao clicar e necessario receber a view como argumento, a view que está sendo usada @Override public void onItemClick(AdapterView<?> adapter,View view, int posicao, long id){ Toast.makeText(ListaAlunos.this, "Clique na posicao "+posicao, Toast.LENGTH_LONG).show();

} });//ja aqui trata o click em apenas um item da lista

//metodo que trata um clique longo lista.setOnItemLongClickListener(new OnItemLongClickListener() {

@Override public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao, long id) { //adapter.getItemAtPosition(posicao); Toast.makeText(ListaAlunos.this, "Clique longo "+adapter.getItemIdAtPosition(posicao), Toast.LENGTH_LONG).show(); return true;//reotrnando true sera executado apenas o click longo, caso retornar false sera executado o click longo

//e o curto } });

}

@Override //abre um menu de opçoes para cada item selecionado, semelhante ao click com botao esquerdo em um item no windows public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, view, menuInfo);

menu.add("Ligar"); menu.add("Enviar SMS"); menu.add("Navegar no site"); menu.add("Deletar"); menu.add("Ver no mapa"); menu.add("Enviar e-mail"); } @Override protected void onResume(){ super.onResume(); AlunoDAO dao = new AlunoDAO(this); List alunos = dao.getLista(); dao.close(); //String[]nomes = {"joao","maria","jose"}; int layout = android.R.layout.simple_list_item_1;

//usa um contexto como parametro que neste caso é a referencia propria classe ListaAlunos, o this ArrayAdapter adapter = new ArrayAdapter(this, layout,alunos);

lista.setAdapter(adapter); }

public boolean onCreateOptionMenu(Menu menu){

getMenuInflater().inflate(R.menu.lista_alunos, menu); //MenuInflater inflater = this.getMenuInflater(); //inflater.inflate(R.menu.lista_alunos, menu);

return super.onCreateOptionsMenu(menu); } / arquivo de layout /

**/

Oi Felismario,

Você pode postar o código completo da sua activity.

Coloque o código formatado para facilitar a leitura, por favor.

Tente trocar o return super.onCreateOptionsMenu(menu); por return true.

Bom, assim q der eu posto, estou viajando no momento, estou sem pc veleu pelo apoio.

^package br.com.cadastro;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.cadastro.modelo.Aluno;
//classe principal
public class ListaAlunos extends Activity {
/**
 * Criando Menu: os itens de menu estão descritos em um XML 
 * dentro da pasta res\menu. O Inflater lê este XML e cria itens de menu.
 */
    private ListView lista;
    private Aluno aluno;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listagem_alunos);

        lista = (ListView)findViewById(R.id.lista);//referencía a lista que esta no arquivo listagem_alunos.xml

        /**avisa ao android para abrir menu de opcoes, 
         * este será aberto ao dar um click longo no item da lista
         * chama o metodo onCreateContextMenu()
         */
        registerForContextMenu(lista);
        //chamando o onCreateContextMenu()
        //lista.setOnClickListener(l);neste casa trato um click na lista toda
        lista.setOnItemClickListener(new OnItemClickListener() {
            //ao clicar e necessario receber a view como argumento, a view que está sendo usada
            @Override
            public void onItemClick(AdapterView<?> adapter,View view, int posicao, long id){
                Aluno alunoClicado = (Aluno) adapter.getItemAtPosition(posicao);
                Intent irParaFormulario = new Intent(ListaAlunos.this,Formulario.class);
                irParaFormulario.putExtra("alunoSelecionado", alunoClicado);
                startActivity(irParaFormulario);

            }
        });//ja aqui trata o click em apenas um item da lista

        //metodo que trata um clique longo
        lista.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View view,int posicao, long id) {
                //daqui chama o onCreatContextMenu()    
                //adapter.getItemAtPosition(posicao);
                aluno = (Aluno) adapter.getItemAtPosition(posicao);
                return false;//reotrnando true sera executado apenas o click longo, 
                            //caso retornar false sera executado o click longo  e o curto
                            //deve retornar false para poder chamar o onCreateContextMenu()

                //e o curto
            }
        });

    }

    @Override /**abre um menu de opçoes para cada item selecionado, 
                 semelhante ao click com botao esquerdo em um item no windows
                 Este é acionado com click longo no item da lista
             **/
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){//a view recebida como parametro é 
        super.onCreateContextMenu(menu, view, menuInfo);//a view clicada, neste caso a lista

        menu.add("Ligar");
        menu.add("Enviar SMS");
        menu.add("Navegar no site");
        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AlunoDAO dao =    new AlunoDAO(ListaAlunos.this);
                dao.deletar(aluno);
                dao.close();

                carregaLista();
            return false;
            }
        });
        menu.add("Ver no mapa");
        menu.add("Enviar e-mail");
    }
    @Override
    protected void onResume(){
        super.onResume();
        carregaLista();
    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.getLista();
        dao.close();
        //String[]nomes = {"joao","maria","jose"};
        int layout = android.R.layout.simple_list_item_1;

        //usa um contexto como parametro que neste caso é a referencia propria classe ListaAlunos, o this
        ArrayAdapter<Aluno> adapter  = new ArrayAdapter<Aluno>(this, layout,alunos);

        lista.setAdapter(adapter);

    }

    //07:52
    public boolean onCreateOptionMenu(Menu menu){

        //getMenuInflater().inflate(R.menu.lista_alunos, menu);
        MenuInflater inflater = this.getMenuInflater();
        inflater.inflate(R.menu.lista_alunos, menu);

        return super.onCreateOptionsMenu(menu);
    }

    public boolean optionsItemSelected(MenuItem item){
        int itemClicado = item.getItemId();

        switch (itemClicado) {
        case R.id.novo:
            Intent irParaFormulario = new Intent(this,Formulario.class);
            startActivity(irParaFormulario);
            break;

        default:
            break;
        }
        return false;

    }
}
Olá pessoal estou de volta, bem segue ai o meu código, fiz as alterações sugeridas, porém, não funcionou!

Nada como uma boa consulta na documentação, segue resposta:

To request that an item appear directly in the action bar as an action button, include showAsAction="ifRoom" in the tag. For example:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom"  />
    ...
</menu>

If there's not enough room for the item in the action bar, it will appear in the action overflow.

Using XML attributes from the support library Notice that the showAsAction attribute above uses a custom namespace defined in the tag. This is necessary when using any XML attributes defined by the support library, because these attributes do not exist in the Android framework on older devices. So you must use your own namespace as a prefix for all attributes defined by the support library.

Fonte: http://developer.android.com/guide/topics/ui/actionbar.html

Felismario Barbosa Silva Vê se sua herança continua para um Activity, e não para um ActionBarActivity, pode ocorrer do eclipse alterar sua herança de sua ClasseActivity enquanto for implementar o ActionBar, você mal percebera isso, se a sua casse ListaDeAlunosActivity extender ActionBarActivity, é só alterar para Activity e tudo funcionara normalmente na api 17.

cara a minha tb deu esse problema mas o menu da tela abre normal, so do botao do hardware nao abre o menu

Eu tive que utilizar new MenuInflater(getApplication()).inflate(R.menu.menu_principal, menu);

ao invés de

// MenuInflater inflater = this.getMenuInflater(); // inflater.inflate(R.menu.menu, menu);

para mostrar meu menu

Olá Felismario,

Pode postar o código do seu arquivo lista_alunos.xml ?

Já adiantando, tente trocar de return super.onCreateOptionsMenu(menu); para return true como disse o Francisco.

Abraços!

Para o menu aparecer ao lado do titulo da agenda, adicione esse essa tegs na seu xml

 <item
        android:id="@+id/novo"
        android:showAsAction="always"
        android:title="@string/menuNovo"
        android:icon="@drawable/add_male_user_trinta_dois"
    />

Oi Felismario,

Estou fechando este tópico. Caso ainda tenha dúvidas, sinta-se a vontade para abrir outro.

Abraços!

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