【问题标题】:How to have ActionBar in PreferenceActivity?如何在 PreferenceActivity 中有 ActionBar?
【发布时间】:2016-03-01 18:48:01
【问题描述】:

我有一个 Android 应用程序,其 UserSettingsActivity 派生自 PreferenceActivity。当我打开此活动时,没有显示菜单栏。

为了在设置屏幕顶部显示“栏”或“操作栏”,我在 google 中搜索找到了 this linkthis 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(我添加了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

在标记线上。如果没有在这两个文件中添加的部分,应用程序确实可以工作,但是没有(操作)栏......

这里似乎有什么问题?

【问题讨论】:

标签: android


【解决方案1】:

试试这个。
使用 AppCompatActivity 扩展您的活动
然后添加工具栏。参考这里:-http://coderzpassion.com/android-working-with-material-design/

【讨论】:

  • 请给出一个代码示例,说明如何准确更改我的代码。我是初学者,您提供的链接中的信息在我看来就像天体物理计算一样......
【解决方案2】:

PreferenceActivity 现已弃用。在任何其他活动中使用 PreferenceFragment,它可以从 PreferenceActivity 以外的任何父活动扩展

【讨论】:

  • 如果没有一些代码示例,您的答案对我来说毫无用处。我是一个绝对的初学者,我不知道将PreferenceFragment 放在哪里,或者如何更改所有其他代码以使其按照您的建议工作......
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多