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> 

Здесь ява файл активности (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); 
    } 


} 

файл XML, связанные с макетом (show_infix_to_postfix_jurney):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <!--ActionBar in alto--> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/infix_to_postfix_toolbar_procedure" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="#42f480" 
     android:elevation="4dp" 
     android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical"> 

     <TextView 
      android:id="@+id/postfix_jurney_text_wall" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="10sp" 
      android:textSize="20sp" 
      android:gravity="center" 
      android:background="#f2f2f2"/> 

    </ScrollView> 

</LinearLayout> 

И, наконец, файл XML, связанные с навигационной панели (action_bar_postfix_procedure):

<?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 xml пустой, вот почему возникает исключение Ponter. –

+0

Он также выглядит как ваш stacktrace и исходный код не коррелируют. Возможно, попробуйте очистить ваш проект и остановить мгновенный запуск. Также вы должны вызвать 'super.onCreateOptionsMenu (меню)'. – 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 благодарит. Не был уверен, что это был собственный класс пользователей, который он использовал. Я всегда просто использовал на спине, чтобы закрыть деятельность, поскольку я могу установить намерение, если мне нужно. –