Android设置页面未显示任何偏好设置

时间:2016-12-07 23:08:55

标签: java android

背景

在一个相当简单的Android应用中,设置活动仅用于一个ListPreference。单击标题中的菜单项时,将显示一个没有任何首选项或标题的新屏幕。

  • compiledSdkVersion& targetSdkVersion = 25
  • minSdkVersion = 10

代码

这是我目前拥有的代码。

SettingsActivity.java:这里永远不会调用onCreate方法。

public class SettingsActivity extends PreferenceActivity implements Preference.OnPreferenceChangeListener {

    /**
     * {@link PreferenceActivity#onCreate(Bundle)}
     */
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);

        addPreferencesFromResource(R.xml.pref_movies);
    }

    /**
     * {@link android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(Preference, Object)}
     */
    @Override
    public boolean onPreferenceChange(Preference preference, Object o) {

        return false;
    }
}

pref_movies.xml:位于res/xml

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

    <ListPreference
        android:title="@string/setting_sort_label"
        android:key="@string/setting_sort_key"
        android:entries="@array/movies_sort"
        android:entryValues="@array/movies_sort_values" />

</PreferenceScreen>

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.brainchest.udacity.popularmovies">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SettingsActivity"
            android:label="@string/general_settings"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="net.brainchest.udacity.popularmovies.MainActivity"></meta-data>
        </activity>
    </application>

</manifest>

我的片段中的onOptionsItemSelected :此处创建了intent并调用了startActivity。调试器贯穿它,没有例外。

/**
 * {@link Fragment#onOptionsItemSelected(MenuItem)}
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    // open the settings
    if (item.getItemId() == R.id.action_settings) {
        Intent settingsIntent = new Intent(getContext(), SettingsActivity.class);
        startActivity(settingsIntent);
    }

    return super.onOptionsItemSelected(item);
}

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="movies_sort">
        <item>Most popular</item>
        <item>Highest rated</item>
    </string-array>
    <string-array name="movies_sort_values">
        <item>0</item>
        <item>1</item>
    </string-array>
</resources>

我需要在这里显示的其他内容?

到目前为止我尝试了什么

在网上搜索我发现了一些常见错误,这些错误指的是丢失的AndroidManifest.xml条目或混淆了一些资源ID。我根据我的最佳知识仔细检查了这一点,但仍然无效。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

尝试将ListPreference包装在PreferenceCategory中,如下所示:

<PreferenceCategory
    android:key="<YOUR_KEY>"
    android:title="<YOUR_TITILE>" >

    <ListPreference
       android:title="@string/setting_sort_label"
       android:key="@string/setting_sort_key"
       android:entries="@array/movies_sort"
       android:entryValues="@array/movies_sort_values" />
</PreferenceCategory>

答案 1 :(得分:0)

终于找到了问题所在。我使用了错误的重载。而不是

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);

    addPreferencesFromResource(R.xml.pref_movies);
}

未调用,我必须使用

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.pref_movies);
}

现在显示设置。