2017-07-10 6 views
1

Ich habe eine einfache App erstellt, indem ich eine Aktionsleiste hinzugefügt habe. Und Android Studio zeigte kein Problem im Code, aber meine App stürzt ab, wenn ich es ausführe. Ich habe zwei Aktivitäten, in MainActivity Ich habe eine Schaltfläche, und wenn Sie darauf klicken, soll es Sie zu SecondActivity bringen. Und unter SecondActivity sollte in der Aktionsleiste der Pfeil zurück sein, um zu MainActivity zurückzukehren. Btw Ich verwende API 16. Meine Aktivität erweitert Aktivität.Android ActionBar-Problem - App stürzt ab

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
    tools:context="com.actionbar3.MainActivity"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="96dp" 
     android:text="Next Activity" 
     android:onClick="onClickButton"/> 
</RelativeLayout> 

MainActivity:

package com.actionbar3; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 

public class MainActivity extends Activity { 

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

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

    public void onClickButton(View view){ 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 

res/menu/action.xml

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

    <item 
     android:id="@+id/main_action" 
     android:title="@string/settings" 
     android:showAsAction="ifRoom" 
     android:icon="@drawable/settings" 
     /> 

    <item 
     android:id="@+id/info_action" 
     android:title="Info"/> 

</menu> 

ActivitySecond:

package com.actionbar3; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.os.Bundle; 

public class SecondActivity extends Activity { 

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

     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setTitle("Second Activity"); 
    } 
} 

AndroidManifest.xml

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

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

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".SecondActivity" android:parentActivityName=".MainActivity"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value=".MainActivity" /> 
     </activity> 
    </application> 

</manifest> 
+0

Bitte logcat. – Kuffs

+0

Könnten Sie bitte Ihren SecondActivity-XML-Code posten? –

Antwort

5

Sie eine Rekursion Schaffung von return onCreateOptionsMenu(menu);

Aufruf so sollte es einfach sein return true;

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.action, menu); 
    return true; 
    // return onCreateOptionsMenu(menu); 
    // call to itself , mean infinite recursion 
} 
+0

Danke 'Pavneet_Singh' Ich habe es geändert in: 'zurück wahr;' und es hat funktioniert. – SteveYo

+0

Ich bin froh, dass ich helfen konnte, obwohl Sie auch 'return super.onCreateOptionsMenu (menu);' –

0

Die onCreateOptionMenu Methode recurses unendlich, so dass es wie verändern unten

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.action, menu); 
    return true; 
} 
0

Ihre Aktivität mit AppCompatActivity verlängern und getSupportActionBar() für die Abwärtskompatibilität

import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 

public class SecondActivity extends AppCompatActivity { 

und erstellen ActionBar mit getSupportActionBar

ActionBar actionBar = getSupportActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setTitle("Second Activity"); 
bekommen verwenden