Reputation: 3251
I've got the following XML Layout :
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mycloud">
<include
android:id="@+id/app_bar"
layout="@layout/tool_bar" />
</LinearLayout>
With the include tool_bar being :
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 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="wrap_content"
android:background="@color/primaryColour"
android:paddingTop="0dp"
app:title="Noteu"
app:theme="@style/myCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
>
</android.support.v7.widget.Toolbar>
However when I try to set the toolbar with the following class :
import android.nfc.Tag;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;
public class MyCloud extends ActionBarActivity implements MaterialTabListener{
private Toolbar toolbar;
private MaterialTabHost tabHost;
private ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycloud);
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
I get the following error via Logcat :
3-19 22:47:33.183 29878-29878/uk.co.noteu E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: uk.co.noteu, PID: 29878
java.lang.RuntimeException: Unable to start activity ComponentInfo{uk.co.noteu/uk.co.noteu.MyCloud}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference
at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:95)
at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:88)
at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:82)
at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:189)
at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92)
at uk.co.noteu.MyCloud.onCreate(MyCloud.java:35)
at android.app.Activity.performCreate(Activity.java:5953)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372
The tool bar is part of a larger application but I've narrowed down the problem to that and removed all other code leaving with what's above. The code was compiled and tested like it is above.
Upvotes: 5
Views: 14544
Reputation: 733
<include android:id="@+id/app_bar"
layout="@layout/tool_bar" />
Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
Find Your Included View in Your LayoutFile.Easy to access your toolbar without anyerror.
Upvotes: 3
Reputation: 601
Toolbar Id should match.
create folder for version 21 and above(values-v21) and paste the below code in style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- android theme colors -->
<item name="android:colorPrimary">@color/theme_dialer_primary</item>
<item name="android:colorPrimaryDark">@color/theme_dialer_high</item>
<item name="android:colorAccent">@color/theme_dialer_accent</item>
<item name="android:navigationBarColor">@color/theme_dialer_primary</item>
<!-- android transitions -->
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="TransitionSampleActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:colorPrimaryDark">@color/color_set_1_primary</item>
<item name="android:colorPrimary">@color/color_set_1_primary</item>
<item name="android:colorAccent">@color/color_set_1_accent</item>
</style>
<style name="TransitionSampleSecondActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:colorPrimaryDark">@color/color_set_1_primary</item>
<item name="android:colorPrimary">@color/color_set_1_primary</item>
<item name="android:colorAccent">@color/color_set_1_accent</item>
</style>
<style name="theme1" parent="AppTheme">
<item name="android:colorPrimary">@color/color_set_1_primary</item>
<item name="android:colorControlActivated">@color/color_set_1_accent</item>
<item name="android:colorAccent">@color/color_set_1_accent</item>
</style>
<style name="theme2" parent="AppTheme">
<item name="android:colorPrimary">@color/color_set_2_primary</item>
<item name="android:colorControlActivated">@color/color_set_2_accent</item>
<item name="android:colorAccent">@color/color_set_2_accent</item>
</style>
<style name="theme3" parent="AppTheme">
<item name="android:colorPrimary">@color/color_set_3_primary</item>
<item name="android:colorControlActivated">@color/color_set_3_accent</item>
<item name="android:colorAccent">@color/color_set_3_accent</item>
</style>
<style name="theme4" parent="AppTheme">
<item name="android:colorPrimary">@color/color_set_4_primary</item>
<item name="android:colorControlActivated">@color/color_set_4_accent</item>
<item name="android:colorAccent">@color/color_set_4_accent</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
<style name="SlidingTextViewStyle" parent="@android:style/Widget.TextView">
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textColor">#FFF</item>
</style>
</resources>
Under values folder style.xml add below code
<resources>
<style name="AppTheme" parent="MyTheme.Base">
</style>
<!-- Base theme applied no matter what API -->
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!--If you are using revision 22.1 please use just windowNoTitle. Without android:-->
<item name="android:windowNoTitle">true</item>
<!--We will be using the toolbar so no need to show ActionBar-->
<item name="windowActionBar">false</item>
<!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">#2196F3</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">#1976D2</item>
<!-- colorAccent is used as the default value for colorControlActivated
which is used to tint widgets -->
<item name="colorAccent">#FF4081</item>
<!-- You can also set colorControlNormal, colorControlActivated
colorControlHighlight and colorSwitchThumbNormal. -->
</style>
</resources>
In Manifest file:
<application
android:theme="@style/AppTheme" >
Change toolbar to:
<android.support.v7.widget.Toolbar
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
Toolbar Id should match.
Now the actionbar can be viewed in API version21 and above as well as lower versions.
Upvotes: 0
Reputation: 1333
The IDs of your toolbar in layout and code don't match, you used the name of the layout instead of the actual id. You're probably getting a null pointer during findViewById, and setting null as your actionbar.
Upvotes: 8