我有一個從PreferenceActivity
派生的UserSettingsActivity
的Android應用程序。當我打開這個活動時,沒有顯示菜單欄。如何在PreferenceActivity中使用ActionBar?
爲了在設置屏幕頂部顯示「酒吧」或「操作欄」,我在谷歌搜索到了this link和this link。因爲第一個答案似乎已經過時了,所以我在第二個鏈接中嘗試了這個建議,這個鏈接不起作用。因此,我再次發佈了這個問題。這裏是代碼片段我使用:
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
(我加了部分):
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
標記線上的
。如果沒有在這兩個文件中添加的應用程序,該應用程序確實工作,但沒有(動作)欄,但是...
這似乎是什麼問題?
在升級到支持庫v21之後PreferenceActivity中沒有ActionBar的可能重複(http://stackoverflow.com/questions/26509180/no -action-bar-in-preferenceactivity-after-upgrade-support-library-v21),哦,你已經找到我的問題了。你也嘗試[我自己的解決方案](http://stackoverflow.com/a/26995921/995926)? – rekire
是的,我發現你的問題。但是,正確的解決方案是什麼?我應該盲目地嘗試所有不同的可能性和組合嗎? – Alex
那麼我用我自己的答案結束了這種情況。我建議使用更新的偏好支持庫:https://plus.google.com/+AndroidDevelopers/posts/9kZ3SsXdT2T – rekire