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

Botão switch fecha aplicativo

Tenho um botão no qual insere registro no metodo public boolean onOptionsItemSelected(MenuItem item) porem ao clicar no botao ele fecha o aplicativo todo. Quero que ele retorne a minha outra tela activity_lista.xml como corrigir ?

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

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="br.com.alura.agenda.FormularioActivity">


    <item android:id="@+id/menu_formulario_ok"
        android:title="Ok"
        android:icon="@drawable/ic_confirmar"
        app:showAsAction="always"/>

</menu>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nicolle.cupfinal">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
        </activity>
        <activity
            android:name=".Lista"
            android:label="@string/app_name">
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

      </activity>

    </application>

</manifest>
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.item, menu);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Toast.makeText(MainActivity.this, "Aluno salvo!", Toast.LENGTH_SHORT).show();
                finish();
                break;

        }
        return super.onOptionsItemSelected(item);

    }
}
2 respostas
solução!

Oi Nicolle, tudo bem ?

Imagino que o problema seja o break, que naquele ponto ele suspende o código, que necessita de um retorno, acredito que se você o remover e dar em seu lugar um return true ou false, dependendo da sua regra de negócio, vá solucionar seu problema.

Abraços

@Matheus, nesse caso não faz sentido ser o comando "break" já que este está ligado ao "switch case". Esse "break" não finaliza o código...

@Nicolle, para entendermos melhor o cenário... Seu app está iniciando na activity que lista os alunos e quando você pressiona o botão vai para a activity de formulário?

Dá a entender que seu app não está empilhando corretamente as activities e quando executa o finish(), o android entende que não existe activity anterior e finaliza o app.

Tem como postar como está seu código da activity de lista de alunos?

Um teste seria válido seria: acessar o app, clicar no botão "+" e na activity de formulário pressionar o botão voltar do Android, veja se o app fecha...