在一个相当简单的Android应用中,设置活动仅用于一个ListPreference
。单击标题中的菜单项时,将显示一个没有任何首选项或标题的新屏幕。
这是我目前拥有的代码。
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。我根据我的最佳知识仔细检查了这一点,但仍然无效。
我错过了什么?
答案 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);
}
现在显示设置。