Android设置页面未显示任何首选项



背景

在一个相当简单的Android应用程序中,设置活动仅用于一个ListPreference。单击标题中的菜单项时,新屏幕出现而无需任何偏好或标头。

  • compliedsdkversion&targetsdkversion = 25
  • minsdkversion = 10

代码

这是我目前拥有的代码。

settingsActivity.java:这里从未调用ongreate方法。

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>

在我的片段中中的onoptionsitemseled:在此创建了意图, 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。我对我的最大知识进行了仔细检查,但仍然不起作用。

我想念什么?

尝试在这样的peferenceCategory中包装列表列表:

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

最终发现了问题是什么。我使用了错误的超载。而不是

@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);
}

现在显示了设置。

最新更新