I have implemented DoneBar (two buttons in actionbar) in PreferenceActivity
as provided in v20 sdk samples, but after updating SDK and AppCompat to version 21 my app crashes at
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayOptions(int, int)' on a null object reference
That is because getActionBar()
returns null. And There is no getSupportActionBar()
as in ActionBarActivity
.
So my question is how to get that actionbar object in PreferenceActivity
so I could apply custom view on it?
SOLVED
After some research I managed to solve this problem by using PreferenceFragment
with ActionBarActivity
so I could call getSupportActionBar()
I managed to fix this issue by specifying custom theme for my settings activity,
<style name="SettingsTheme" parent="style/Theme.AppCompat.Light">
<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>
</style>
and : android:theme="@style/SettingsTheme"
in manifest for activity
actionbar is again showing on KITKAT and LOLIPOP and (have not tested it) back to api v11. I tested it and it works (with no actionbar as expected) on api 10.
From debugging on lolipop, FEATURE_NO_TITLE
was being set in PhoneWindow.java:3243
:
if (a.getBoolean(R.styleable.Window_windowNoTitle, false)) {
requestFeature(FEATURE_NO_TITLE);
which removes FEATURE_ACTION_BAR
[edit]
but this action bar is not from material theme, so still its not perfect
[edit2]
I gave up with Headers, now I am using PreferenceFragment backport from github. Now all my actionbars are the same after upgrade to appcompact 21.