简体   繁体   中英

How to have ActionBar in PreferenceActivity?

I have an android app with a UserSettingsActivity derived from PreferenceActivity . When I open this activity, no menu bar is shown.

In order to have the 'bar' or 'action bar' on top of the settings screen, I searched for it in google on found this link and this link . Because the first answer seems outdated, I tried the suggestion in the second link which does not work . Therefore I am posting this question again.. Here are the pieces of code I am using:

preferences.xml ( I added just the android.support.v7.widget.Toolbar part):

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    app:navigationContentDescription="@string/abc_action_bar_up_description"
    android:background="?attr/colorPrimary"
    app:navigationIcon="?attr/homeAsUpIndicator"
    app:title="@string/action_settings"
    />

    <ListPreference
        android:title="@string/UpdateInterval"
        android:summary="@string/UpdateIntervalText"
        android:key="updateInterval"
        android:defaultValue="24"
        android:entries="@array/listArray"
        android:entryValues="@array/listValues" />

    <ListPreference
        android:title="@string/LimitSetting"
        android:summary="@string/LimitSettingText"
        android:key="limitSetting"
        android:entries="@array/limitArray"
        android:entryValues="@array/limitValues" />

    <Preference
        android:key="reset"
        android:title="Reset database"
        android:summary="This will remove every entry in the database"
         />
</PreferenceScreen>

and UserSettingsActivity.java (I added the onPostCreate part):

public class UserSettingActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
        Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.xml.preferences, root, false);
        root.addView(bar, 0); // insert at top
        bar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    public class MyPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences); // <<-- ERROR HERE
            // doing something here

        }
    }

}

However, I get the following error:

Caused by: java.lang.ClassCastException: android.support.v7.widget.Toolbar cannot be cast to android.preference.Preference

on the marked line. Without the added pieces in those two files the app did work, without the (action)-bar, however...

What seems to be the problem here?

Try this.
Extend your activity with AppCompatActivity
Then add toolbar. Refer here: - http://coderzpassion.com/android-working-with-material-design/

PreferenceActivity is now deprecated. Use PreferenceFragment inside any other activity, which can be extended from any parent activity other than PreferenceActivity

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM