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

Dúvida no Ex. 7 da Aula 4 - Tela de Cadastro

Olá.

Por que devo usar return false em vez de break?

switch (item.getItemId()) {

case R.id.menu_novo: Toast.makeText(ListaAlunosActivity.this, "Aluno", Toast.LENGTH_LONG).show();

return false; //break;

Obrigado.

8 respostas

Olá Julius! Creio que nesse caso não faz diferença você usar break ou return false. Ambos estão sendo utilizados para que assim que escolhida uma opção, apenas aquele código seja executado. Mas por uma questão de semântica o break se encaixa melhor. Pois o break é utilizado para você interromper um loop ou uma execução de código e nesse casso é justamente o que queremos. Creio que a resposta foi utilizada com o return false apenas para indicar uma segunda forma de fazer o encerramento da execução.

Espero que tenha ajudado. Qualquer coisa só perguntar! Bons Estudos!

Valeu Romário, mas na explicação da aula eles pedem que seja usado o return.

Dizem o porquê, mas não entendi exatamente. A explicação me parece insuficiente.

Aguardo retorno. Obrigado.

Na explicação? Mas tanto na explicação escrita como no video ambos utilizam o break. Qual explicação você esta falando?

Você tem razão Romário. Não está em nenhuma explicação.

Eu me confundi e formulei errado a questão.

Não há um retorno false dentro do switch.

Na verdade, no exercício 7, há uma orientação referente ao retorno do método onOptionsItemSelected que diz: "Importante: Você deve retornar false para que ele termine o processamento da seleção."

Então essa é a dúvida. Por que retornar false e não retornar super.onOptionsItemSelected(item)?

Acho que cabe uma explicação sobre esse "processamento de seleção".

Valeu Romário.

Então Julius, como havia dito, ambos desempenham a mesma função. Tanto o return false como o break tem por objetivo encerrar a execução do código não deixando prosseguir. Mas vou tentar deixar mais claro. O método onOptionsItemSelected(item) é um método boolean.

Então ele tem que retornar ou o valor true ou o valor false. Por padrão, o método quabdo chamado oela superclasse a qual ele pertence retorna false. Mas o que significa esse true ou false? Quando o método retorna true ele não encerra sua execução apenas no item selecionado.

Ou seja.. digamos que você tenha 3 itens no seu Menu.. Item A, Item B, Item C.

Caso você selecione o item A e o mesmo retorne true o menu não encerrará e parte novamente para a verificação se um outro item será selecionado. No entanto, caso você selecione o item A é ao final o msm retorne false.. O menu apenas executará o código e encerrará.

Quanto a sua dúvida Por que retornar false e não retornar super.onOptionsItemSelected(item)?

Não faz diferenca. Uma vez que como eu disse, por padrão quando esse método é chamado pela superclasse a qual ele pertence ele retorna a false. Então ao dizermos super.onOptionsItemSelected(item) é o mesmo de estarmos colocando return false. Faça o teste é substitua o return false por super.onOptionsItemSelected(item) é vc verá q nada mudará e o código continuará rodando como antes.

Espero que eu tenha ajudado. Bons Estudos!

Boa tarde Julius,

O valor de retorno do método onOptionsItemSelected indica se o evento de item de menu selecionado deve ser consumido ou não. Se você devolver true, o evento é consumido e o único comportamento realizado é aquele que você implementou no método. Caso contrário, se você devolver false, o Android irá continuar o tratamento do evento fazendo algumas chamadas adicionais.

Por exemplo, é possível associar uma Intent com um item de menu. Você pode fazer isso da seguinte maneira:


MenuItem item = menu.add("Novo aluno");
Intent intent = new Intent(this, FormularioActivity.class);
item.setIntent(intent);

Dessa forma, quando você clicar no item de menu "Novo aluno", primeiro o Android invoca o método onOptionsItemSelected. Se este método devolver false, o evento não é consumido e então a Intent associada ao item de menu é executada pelo Android. Caso o método devolva true, estamos indicando que não queremos que o tratamento do evento continue e portanto o Android não executa a Intent associada ao item de menu.

Abraço!

isso mesmo Jeferson! Acabei me complicando ali em cima e inverti. Quando chamamos o return true o evento é simplesmente consumido sem efetuar nenhuma chamada ao demais. Enquanto se utilizarmos o return false ele poderá verificar o id do evento em outras funções.

solução!

Ok Jeferson! Entendido. Obrigado pela ajuda.