2015-12-20 1 views
3

У меня эта проблема в моем коде, я не могу настроить кнопку «Назад» в ActionBar. я указал в AndroidManifest, что AProposActivity ребенок деятельность в MainActivity, но у меня есть java.lang.NullPointerException. Существует мой код Java:Как настроить кнопку «Назад» в ActionBar?

public class AProposActivity extends AppCompatActivity { 

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

    getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); 
} 
} 

и мой XML-файл:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.emi.integre.projet.dentistterms.AProposActivity"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/apropos1" 
    android:id="@+id/textView3" 
    android:layout_above="@+id/textView4" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginBottom="42dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/apropos2" 
    android:id="@+id/textView4" 
    android:layout_centerVertical="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/name1" 
    android:id="@+id/textView5" 
    android:layout_below="@+id/textView4" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginRight="24dp" 
    android:layout_marginLeft="24dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/name2" 
    android:id="@+id/textView6" 
    android:layout_below="@+id/textView5" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginRight="24dp" 
    android:layout_marginLeft="24dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/name3" 
    android:id="@+id/textView7" 
    android:layout_below="@+id/textView6" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginRight="24dp" 
    android:layout_marginLeft="24dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/name4" 
    android:id="@+id/textView8" 
    android:layout_below="@+id/textView7" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginRight="24dp" 
    android:layout_marginLeft="24dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/apropos4" 
    android:id="@+id/textView9" 
    android:layout_marginBottom="56dp" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginRight="12dp" 
    android:layout_marginLeft="12dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/apropos3" 
    android:id="@+id/textView11" 
    android:layout_above="@+id/textView10" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/name5" 
    android:id="@+id/textView10" 
    android:layout_above="@+id/textView9" 
    android:layout_alignLeft="@+id/textView8" 
    android:layout_alignStart="@+id/textView8" /> 

есть и мой AndroidManifest :

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.emi.integre.projet.dentistterms"> 

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

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".AcceuilActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ResultActivity" 
     android:label="Voici le terme dans les 3 langues" 
     android:parentActivityName=".MainActivity"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.emi.integre.projet.dentistterms.MainActivity" /> 
    </activity> 
    <activity 
     android:name=".SearchActivity" 
     android:label="Rechercher un terme" 
     android:parentActivityName=".MainActivity"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.emi.integre.projet.dentistterms.MainActivity" /> 
    </activity> 

    <activity android:name=".AProposActivity" android:label="A Propos" 
     android:parentActivityName=".MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.emi.integre.projet.dentistterms.MainActivity"/> 
    </activity> 

</application> 

здесь также мой styles.xml файл:

<resources xmlns:tools="http://schemas.android.com/tools"> 


<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:colorBackground">@color/background_material_light</item> 
    <item name="android:textColorPrimary">@android:color/black</item> 
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
    <item name="android:windowTranslucentStatus" tools:targetApi="21">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:navigationBarColor" tools:targetApi="21">@color/navigationBarColor 
    </item> 
    <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="21">true</item> 
</style> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
    <item name="spinBars">true</item> 
    <item name="color">@color/drawerArrowColor</item> 
</style> 

ответ

1

При установке android:theme="@style/AppTheme.NoActionBar" для вашего приложения в AndroidManifest.xml, то ActionBar не будет завышена. Вы можете использовать либо ToolBar, объявив его в макете и вызова

setSupportActionBar((ToolBar) findViewById(R.id.toolBar)); 

перед любым getSupportActionBar() вызова, или изменить theme с той, которая имеет поддержку ActionBar

+0

Какие темы имеют поддержку ActionBar? –

+0

'Theme.AppCompat.Light', например. – Blackbelt

+0

Я изменил тему, но проблема остается –

0

Шаг 1: Сделать xml, который имеющие toolbar имя его toolbar_layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Шаг 2: Вы должны добавить вышеупомянутую панель инструментов в макете деятельности, которые вы можете сделать это, в том числе его следующим образом:

<LinearLayout 
    android:id="@+id/container_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

<include 
    android:id="@+id/toolbar" 
    layout="@layout/toolbar" /> 
</LinearLayout> 

Шаг 3: Внесите изменения в вашем методе onCreate() следующим образом:

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

    ToolBar toolbar = (ToolBar) findViewById(R.id.toolBar) 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    //your code here 
} 

Шаг 4: В onOptionsItemSelected() проверки идентификатор следующим образом:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if(id == android.R.id.home){ 
      //onBackPressed(); //you can call this directly 
         //OR 
      //your code implementation if any 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

У меня есть эта проблема для вашего кода: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' для ссылки на нулевой объект –

+0

'Toolbar.getTitle() 'Я не делаю этого в своем коде – Pankaj

+0

Я тоже! Проблема остается –

0

Если вы используете по умолчанию ActionBar затем используйте

ActionBar actionBar = getActionBar(); 
actionBar.setHomeButtonEnabled(true); 
actionBar.setDisplayHomeAsUpEnabled(true); 

и в onOptionItemSelected (MenuItem пункт) способ добавить следующие строки кода

case android.R.id.Home : 
     this.finish(); 
     return true; 
+0

это не работает! но спасибо за вашу помощь –

+0

Импорт android.support.v7.app.ActionBar вместо android.app.ActionBar –

0

Попробуйте

public void enableActionBarHomeButton(AppCompatActivity appCompatActivity){ 
    android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar(); 
    mActionBar.setHomeButtonEnabled(true); 
    mActionBar.setDisplayHomeAsUpEnabled(true); 
} 

Затем сделайте вызов функции следующим образом:

enableActionBarHomeButton(this);