0

我想在這個非常簡單的活動(這是由另一個活動實例化)啓用後退按鈕,但我總是得到空指針異常,因此我的應用程序崩潰時,我啓動活動(沒有活動欄中的後退按鈕,活動效果很好)。 我試着貼在互聯網上許多不同的解決方案,但沒有工作...... 我這個指南:Android Developer providing up navigation後退按鈕在操作欄不起作用

這裏清單文件:

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/Theme.AppCompat.Light.NoActionBar" 
     android:screenOrientation="portrait"> 
     <!--attività principale--> 
     <activity 
      android:name=".MainActivity" 
      android:launchMode="singleInstance"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!--attività infixToPostfix--> 
     <activity 
      android:name=".InfixToPostfixActivity" 
      android:launchMode="singleTask" 
      android:label="@string/infix_to_postfix"/> 
     <!--attività figlia di infixToPostfix--> 
     <activity 
      android:name=".ShowPostfixProcedureActivity" 
      android:launchMode="standard" 
      android:label="@string/postfix_procedure" 
      android:parentActivityName=".InfixToPostfixActivity" /> 
    </application> 

</manifest> 

這裏活動的Java文件( ShowPostfixProcedureActivity):

package com.example.android.projectcalculator; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.NavUtils; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.text.Html; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

import java.util.Stack; 

import static java.lang.Character.isDigit; 

public class ShowPostfixProcedureActivity extends AppCompatActivity { 

    private static String equation; 
    private static int openBracket; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.show_infix_to_postfix_jurney); 
     Toolbar myToolbar = (Toolbar) findViewById(R.id.infix_to_postfix_toolbar_procedure); 
     setSupportActionBar(myToolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     TextView txview = (TextView)findViewById(R.id.postfix_jurney_text_wall); 
     Stack<String> s = new Stack<String>(); 
     s = DataProcessor.ReturnProcess(); 
     txview.setText(s.pop()); 
     while (!s.empty()) 
     { 
      if (s.peek().charAt(0) == '<') 
      { 
       txview.append(Html.fromHtml(s.pop())); 
      } 
      else 
      { 
       txview.append(s.pop()); 
      } 
     } 
     //Log.d("SPPA/onCreate","text = "+DataProcessor.ReturnProcess()); 
    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.action_bar_postfix_procedure, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     switch (item.getItemId()) { 
      // Respond to the action bar's Up/Home button 
      case android.R.id.home: 
       NavUtils.navigateUpFromSameTask(this); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 


} 

相關佈局(show_infix_to_postfix_jurney)的XML文件:

​​

最後涉及到導航條(action_bar_postfix_procedure)的XML文件:

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



</menu> 

這裏的錯誤消息:

10-29 17:14:43.841 18822-18822/com.example.android.projectcalculator E/AndroidRuntime: FATAL EXCEPTION: main 
                         Process: com.example.android.projectcalculator, PID: 18822 
                         Theme: themes:{} 
                         java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setEnabled(boolean)' on a null object reference 
                          at com.example.android.projectcalculator.ShowPostfixProcedureActivity.onCreateOptionsMenu(ShowPostfixProcedureActivity.java:51) 
                          at android.app.Activity.onCreatePanelMenu(Activity.java:2852) 
                          at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:340) 
                          at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) 
                          at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:258) 
                          at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) 
                          at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454) 
                          at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) 
                          at android.os.Handler.handleCallback(Handler.java:739) 
                          at android.os.Handler.dispatchMessage(Handler.java:95) 
                          at android.os.Looper.loop(Looper.java:148) 
                          at android.app.ActivityThread.main(ActivityThread.java:5461) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+2

菜單XML是空取代它...你真的需要'onCreateOptionsMenu'方法? –

+2

您左鍵菜單xml空白,這就是爲什麼發生null龐特異常。 –

+0

它也看起來像您的堆棧跟蹤和源代碼不相關。也許試着清理你的項目並停止即時運行。你也應該調用'super.onCreateOptionsMenu(menu)'。 – tynn

回答

0

我不知道是什麼行NavUtils.navigateUpFromSameTask(this);應該做的事。如果你想關閉後退按鈕的按下活動與方法調用onBackPressed()

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      onBackPressed() 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+1

*要瀏覽起來的時候用戶按下應用程序圖標,則可以使用NavUtils類的靜態方法navigateUpFromSameTask()。當你調用這個方法時,它完成當前的活動,並開始(或恢復)適當的父活動。* - https://developer.android.com/training/implementing-navigation/ancestral.html#NavigateUp –

+0

@ cricket_007謝謝。不知道這是否是他正在使用的用戶自己的課程。如果需要的話,我一直只是用來關閉活動,因爲我可以設置意圖。 –