2017-07-10 81 views
1

我已經創建了一個簡單的應用程序添加到它的操作欄。並且android studio沒有在代碼中顯示任何問題,但是當我運行它時,我的應用程序不斷崩潰。 我有兩個活動,在MainActivity我有一個按鈕,當你點擊它應該帶你到SecondActivity。並在SecondActivity應該有後退箭頭在操作欄中返回到MainActivity。 順便說一句我正在使用API​​ 16.我的活動擴展了活動。Android ActionBar問題 - 應用程序崩潰

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 /菜單/ 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

請發佈logcat。 – Kuffs

+0

您能否請您發佈您的SecondActivity xml代碼。 –

回答

5

您可以通過調用return onCreateOptionsMenu(menu);

創建一個遞歸所以應該只是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

謝謝'Pavneet_Singh'我將它改爲:'return true;'它的工作。 – SteveYo

+0

我很高興我可以幫忙,雖然,你也可以使用'return super.onCreateOptionsMenu(menu);' –

0

的onCreateOptionMenu方法遞歸無限,所以更改如下

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

與AppCompatActivity擴展您的活動,並使用獲得getSupportActionBar()用於向後兼容

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

public class SecondActivity extends AppCompatActivity { 

,並創建動作條使用getSupportActionBar

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