我正在使用ActionBarSherlock
做一个Android应用程序。我的问题是制作首选项屏幕。SherlockPreferenceActivity
类上的onBuildHeader()
方法称为神经。
这是我的代码
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>
首选项.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>
我的偏好活动
public class MyPreferenceActivity extends SherlockPreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
MyPpreferencesFragment
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
}
}
只有在 API 级别 11 或更高版本上运行时才会调用onBuildHeaders()
。在较旧的设备上,您将返回到经典的addPreferencesFromResource()
方法。
有关在 API 级别 11+ 上支持 PreferenceFragment
以及在旧版本 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);
}
}
onCreate()
我们只需要在较旧的设备上执行addPreferencesFromResource()
。在本例中,我的示例有两个首选项标头,因此有两个首选项 XML 文件,因此我们对这两个文件都调用 addPreferencesFromResource()
。在较新的设备上,onCreate()
除了链接到超类之外什么都不做,这将触发对onBuildHeaders()
的调用。
onBuildHeaders() 仅在 API 级别 11 或更高版本上运行时才会被调用。有关在 API 级别 11+ 上支持 PpreferencesFragment 和在旧版 Android 上支持 classic 首选项的示例,请参阅 github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC。
– CommonsWare Jun 7 '12 在 11:06
@CommonsWare,请您在回答时发布此内容,以便我可以删除您的答案副本。