I have activity with a navigation box that moves between fragments. Nothing special.
However, I want the action bar to appear at the top of the action. The problem is that I keep getting nullpointerexception for the Actionbar .
I tried the answers from the following pages:
getActionBar returns null
getActionBar () returns Null (AppCompat-v7 21)
None of them worked, so I thought that I would post my own question with my own code.
MainActivity.java
package com.jampez.smalltalk; import com.jampez.smalltalk.fragments.HomeFragment; import com.jampez.smalltalk.fragments.MessageFragment; import com.jampez.smalltalk.fragments.PreferencesFragment; import com.jampez.smalltalk.fragments.SettingsFragment; import com.jampez.smalltalk.helper.SessionManager; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends FragmentActivity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private String[] items; int selectedPosition; private SessionManager session; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getActionBar().setTitle("");
activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:theme="@android:style/Theme.WithActionBar" > <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <ListView android:id="@+id/drawer_list" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout>
HomeFragment.java
package com.jampez.smalltalk.fragments; import com.jampez.smalltalk.R; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class HomeFragment extends Fragment { public HomeFragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_home, container, false);
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:background="#e5e5e5" android:orientation="vertical" > <TextView android:id="@+id/home_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_gravity="start|center_vertical" android:text="@string/home"/> </LinearLayout>
Android manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jampez.smalltalk" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_PROFILE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <application android:name=".app.AppController" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoginActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustResize|stateHidden" > </activity> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> </application>
styles.xml
<resources> <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> </style> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@color/white</item> </style> <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow"> <item name="android:color">@color/white</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#25a0da</item> </style>
Logcat Output
11-08 19:17:38.618: E/AndroidRuntime(6347): FATAL EXCEPTION: main 11-08 19:17:38.618: E/AndroidRuntime(6347): Process: com.jampez.smalltalk, PID: 6347 11-08 19:17:38.618: E/AndroidRuntime(6347): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jampez.smalltalk/com.jampez.smalltalk.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread.access$900(ActivityThread.java:172) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.os.Handler.dispatchMessage(Handler.java:102) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.os.Looper.loop(Looper.java:145) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread.main(ActivityThread.java:5832) 11-08 19:17:38.618: E/AndroidRuntime(6347): at java.lang.reflect.Method.invoke(Native Method) 11-08 19:17:38.618: E/AndroidRuntime(6347): at java.lang.reflect.Method.invoke(Method.java:372) 11-08 19:17:38.618: E/AndroidRuntime(6347): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 11-08 19:17:38.618: E/AndroidRuntime(6347): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 11-08 19:17:38.618: E/AndroidRuntime(6347): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference 11-08 19:17:38.618: E/AndroidRuntime(6347): at com.jampez.smalltalk.MainActivity.onCreate(MainActivity.java:37) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.Activity.performCreate(Activity.java:6221) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 11-08 19:17:38.618: E/AndroidRuntime(6347): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 11-08 19:17:38.618: E/AndroidRuntime(6347): ... 10 more