Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
475 views
in Technique[技术] by (71.8m points)

android - getActionBar() returns null in PreferenceActivity (AppCompat-v7 21)

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()

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...