簡體   English   中英

如何在PreferenceActivity中使用ActionBar?

[英]How to have ActionBar in PreferenceActivity?

我有一個Android應用程序,它具有從PreferenceActivity派生的UserSettingsActivity 當我打開此活動時,沒有顯示菜單欄。

為了在“設置”屏幕頂部顯示“欄”或“操作欄”,我在Google上搜索了該鏈接該鏈接 因為第一個答案似乎已經過時,所以我嘗試了第二個不起作用的鏈接中的建議。 因此,我再次發布此問題。.這是我正在使用的代碼片段:

preferences.xml (我僅添加了android.support.v7.widget.Toolbar部分):

<?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>

UserSettingsActivity.java (我添加了onPostCreate部分):

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

        }
    }

}

但是,出現以下錯誤:

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

在標記的線上。 但是,在這兩個文件中沒有添加片段的情況下,該應用程序確實可以正常運行,但是沒有(動作)欄。

這里似乎是什么問題?

嘗試這個。
通過AppCompatActivity擴展您的活動
然后添加工具欄。 請參閱此處: -http : //coderzpassion.com/android-working-with-material-design/

現在不推薦使用PreferenceActivity。 在任何其他活動中使用PreferenceFragment,可以從除PreferenceActivity之外的任何父活動中擴展

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM