Vin*_*pré 39 android preferences actionbarsherlock
我正在使用Android应用程序ActionBarSherlock.我的问题是制作首选屏幕.在onBuildHeader()对方法SherlockPreferenceActivity类nerver调用.
这是我的代码
preference_headers.xml
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header
android:fragment="package.fragments.MyPreferenceFragment"
android:icon="@drawable/bulle"
android:summary="An example of some preferences."
android:title="title" />
</preference-headers>
Run Code Online (Sandbox Code Playgroud)
的preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/options" >
<PreferenceCategory>
<SwitchPreference
android:id="@+id/cb_notif"
android:defaultValue="false"
android:key="com.vincent.HTC_Dev.pref.notif"
android:summaryOff="@string/notifications_off"
android:summaryOn="@string/notifications_on"
android:title="@string/notifications" />
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
MyPreferenceActivity
public class MyPreferenceActivity extends SherlockPreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
Run Code Online (Sandbox Code Playgroud)
MyPreferenceFragment
public class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 10
onBuildHeaders()只有在API级别11或更高级别上运行时才会调用.在较旧的设备上,您又回到了经典的addPreferencesFromResource()方法.
请参阅此示例项目,以获取PreferenceFragment有关API Level 11+ 的支持示例以及旧版Android上的经典首选项.
具体来说,它SherlockFragmentActivity看起来像:
package com.commonsware.android.preffragsbc;
import java.util.List;
import android.os.Build;
import android.os.Bundle;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
public class EditPreferences extends SherlockPreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB) {
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.preferences2);
}
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
Run Code Online (Sandbox Code Playgroud)
在onCreate()我们需要只有做addPreferencesFromResource() ,如果我们有一个较旧的设备上.在这种情况下,我的示例有两个首选项标题,因此有两个首选项XML文件,因此我们调用addPreferencesFromResource()它们.在较新的设备上,onCreate()除了链接到超类之外什么都不做,这会触发调用onBuildHeaders().
\n\n\n仅当您在 API 级别 11 或更高版本上运行时,才会调用 onBuildHeaders()。请参阅 github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC,了解在 API 级别 11+ 上支持 PreferenceFragment 以及旧版本 Android 上的经典首选项的示例。
\n
\n \xe2\x80\x93 CommonsWare 2012 年 6 月 7 日 11:06
@CommonsWare,您可以在回答时发布此内容,以便我可以删除您的答案的副本。
\n| 归档时间: |
|
| 查看次数: |
11263 次 |
| 最近记录: |