使用动作栏夏洛克的首选项屏幕



我正在使用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,请您在回答时发布此内容,以便我可以删除您的答案副本。

相关内容

  • 没有找到相关文章

最新更新