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

onOptionsItemSelected não está sendo chamada.

Estou seguindo o tutorial e nesta parte quando criamos o menu e adicionamos, onOptionsItemSelected não funciona.

A imagem do menu até aparece mas não ocorre nada.

O onOptionsItemSelected sequer é chamado. Procurei algumas respostas na internet e fala-se munto em "Fragment" mas até a aula que estou este termo não foi utilizado.

Não sei se interfere, mas setei o projeto para usar o android KitKat (versão do meu aparelho)

7 respostas

Oi Gilson, tudo bem ?

Você pode postar o código da sua activity aqui para podermos ver o que está acontencendo ?

Abraços !

Estou seguindo o exemplo de vcs e criando um novo projeto. Ao invés de uma lista de alunos estou criando uma lista de compras no supermercado. Tava funcionando tudo muito bem até o momento que a aula troca o botão pelo menu. O símbolo do menu eu usei um qualquer do android mesmo já que eu não designei nenhuma imagem própria minha.

Notei que a versão do Studio de vcs deve ser anterior à que eu uso pois no meu Studio , quando vamos criar uma nova Blank activity aparece uma opção para criar fragment. Também é criado automaticamente o floatbutton.

Na minha versão são criados no mínimo dois xml para cada activity, um com o nome "content_nomedaactivity" e ou outro é o activity_nomedaactivity"

Minha versão é a 1.4. Estes não ocorreram no tutorial.

java do formulário:


package com.disprosio.capitao.compras;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.ToggleButton;

public class FormularioActivity extends AppCompatActivity {


    EditText item ;
    EditText valorComprado;
    Button botaoCalcular;
    EditText quantidadeComprada;
    EditText unidade;
    EditText  quantidadeDesejada ;
    EditText precoAlvoUnitario ;

    EditText custodoItem;
    EditText observacoes;
    ToggleButton togglebutton;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_formulario);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        identificarCamposeBotoes();
        criabtnSalvar();
        criabtnCalcular();
    }


    public void criabtnSalvar(){
        Button botaoSalvar = (Button) findViewById(R.id.formulario_btn_Salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(FormularioActivity.this, "Irá para a Lista", Toast.LENGTH_SHORT).show();

                finish();


            }


        });
    }


    public void identificarCamposeBotoes(){

        item = (EditText)findViewById(R.id.formulario_nome);
        unidade = (EditText)findViewById(R.id.formulario_unidade);
        quantidadeDesejada = (EditText)findViewById(R.id.formulario_quantidade);
        precoAlvoUnitario = (EditText)findViewById(R.id.formulario_precoUnitarioAlvo);
        botaoCalcular = (Button) findViewById(R.id.formulario_btn_Calcular);
        valorComprado = (EditText)findViewById(R.id.formulario_precoObtido);
        quantidadeComprada = (EditText)findViewById(R.id.formulario_quantidadeComprada);
        custodoItem = (EditText)findViewById(R.id.formulario_custoItem);
        observacoes = (EditText)findViewById(R.id.formulario_observacoes);
        togglebutton = (ToggleButton)findViewById(R.id.formulario_toggleButton);
    }

    public void criabtnCalcular(){

           botaoCalcular.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               int display3 = Integer.parseInt(FormularioActivity.this.valorComprado.getText().toString()) *Integer.parseInt(FormularioActivity.this.quantidadeComprada.getText().toString()) ;

                String str = display3 + "";
                custodoItem.setText(str);
                Toast.makeText(FormularioActivity.this,  display3 + " é o valor total de  "  + item.getText().toString(), Toast.LENGTH_SHORT).show();

            }

        });
    }

//
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

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

        Toast.makeText(FormularioActivity.this, "metodo onCreateOptionsMenu de FormularioActivity.java", Toast.LENGTH_SHORT).show();
        return true;
        //return super.onCreateOptionsMenu(menu);
    }



    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        Toast.makeText(FormularioActivity.this, "Foi CHAMADO onOptionsItemSelected()", Toast.LENGTH_SHORT).show();


        switch (item.getItemId()){

            case R.id.menuFormulario_ok:
            Toast.makeText(FormularioActivity.this, "Menu Formulário _ Irá para a Lista", Toast.LENGTH_SHORT).show();
            finish();
            break;

        }

        return false;
        //return super.onOptionsItemSelected(item);
    }
}

content formulário:


<?xml version="1.0" encoding="utf-8"?>





<ScrollView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout



    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_formulario"
    tools:context="com.disprosio.capitao.compras.FormularioActivity"
    android:orientation="vertical"
    android:weightSum="1">


    <Space
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_weight="10.00" />

    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Item"
    android:id="@+id/formulario_nome"/>


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Unidade"
        android:id="@+id/formulario_unidade"/>


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Quantidade"
        android:id="@+id/formulario_quantidade"/>



    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Preço Unitário Alvo"
        android:id="@+id/formulario_precoUnitarioAlvo"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Preço Obtido"
        android:id="@+id/formulario_precoObtido"/>


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Quantidade Comprada"
        android:id="@+id/formulario_quantidadeComprada"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Custo Do Item$"
        android:id="@+id/formulario_custoItem"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Observações"
        android:id="@+id/formulario_observacoes"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Calcular"
        android:id="@+id/formulario_btn_Calcular" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Salvar"
        android:id="@+id/formulario_btn_Salvar"
        android:textSize="15dp"/>

    <ToggleButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New ToggleButton"
        android:id="@+id/formulario_toggleButton" />


</LinearLayout>
</ScrollView >

activity do formulário:


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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"
    android:fitsSystemWindows="true"
    tools:context="com.disprosio.capitao.compras.FormularioActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_formulario" />

</android.support.design.widget.CoordinatorLayout>

xml do menu do formulário:


<?xml version="1.0" encoding="utf-8"?>
<menu
    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"
    tools:context="com.disprosio.capitao.compras.FormularioActivity">


    <item
        android:id="@+id/menuFormulario_ok"
        android:title="ok"
        app:showAsAction="always"

        />


    <item
        android:id="@+id/menuFormulario_no"
        android:title="no"
        android:icon="@android:drawable/ic_menu_sort_by_size"
        app:showAsAction="always|withText" />

</menu>

o post foi cortado. continuando: xml do menu do formulário:

<?xml version="1.0" encoding="utf-8"?>

!!! não está deixando eu colar os xml...

'<?xml version="1.0" encoding="utf-8"?>' '<menu ' 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" 'tools:context="com.disprosio.capitao.compras.FormularioActivity"'>

' <item ' android:id="@+id/menuFormulario_ok" ' android:title="ok" ' app:showAsAction="always"

' />

'

'

content do formulário: '<?xml version="1.0" encoding="utf-8"?>

'<ScrollView ' xmlns:app="http://schemas.android.com/apk/res-auto" ' xmlns:tools="http://schemas.android.com/tools" ' xmlns:android="http://schemas.android.com/apk/res/android"

' android:layout_width="match_parent" ' android:layout_height="match_parent">

'

' <Space ' android:layout_width="match_parent" ' android:layout_height="50dp" ' android:layout_weight="10.00" />

'

'

'

'

' '

' ' '' '

' ' ' ''

' ' '

'' '

TENTEI COLAR OS XMLS MAS BUGA A TELA DA RESPOSTA.

solução!

Gilson tudo bem ?

Esse xml -> R.menu.menu_formulario2 <- é esse abaixo ?

<?xml version="1.0" encoding="utf-8"?>
<menu
    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"
    tools:context="com.disprosio.capitao.compras.FormularioActivity">


    <item
        android:id="@+id/menuFormulario_ok"
        android:title="ok"
        app:showAsAction="always"

        />


    <item
        android:id="@+id/menuFormulario_no"
        android:title="no"
        android:icon="@android:drawable/ic_menu_sort_by_size"
        app:showAsAction="always|withText" />

</menu>

Alias, sobre a forma que o Android Studio está criando suas activities, você pode pedir para ele gerar um EmptyActivity, o que fará que ele gere os arquivos da forma que o curso está.

Matheus, Criei com o EmptyActivity e deu tudo certo. Obrigado.