如何获取Android偏好的类别?

gre*_*egm 11 android android-preferences

我如何得到PreferenceCategory一个PreferencePreferenceManager有一个findPreference方法,但Preference没有getCategory方法.

有没有办法从它的关键名称得到PreferenceCategory一个Preference

Sta*_*lav 10

SDK中没有内置方法来获取首选项的父级(类别或屏幕).您应该在层次结构中手动找到它,以便能够编写如下内容:

Preference preference = findPreference(key);
getParent(preference).removePreference(preference);
Run Code Online (Sandbox Code Playgroud)

以下是启用它的方法.请注意,它应该写在您的首选项活动(从PreferenceActivity类派生)中,它可以通过调用getPreferenceScreen()来提供层次结构根目录.

private PreferenceGroup getParent(Preference preference)
{
    return getParent(getPreferenceScreen(), preference);
}

private PreferenceGroup getParent(PreferenceGroup root, Preference preference)
{
    for (int i = 0; i < root.getPreferenceCount(); i++)
    {
        Preference p = root.getPreference(i);
        if (p == preference)
            return root;
        if (PreferenceGroup.class.isInstance(p))
        {
            PreferenceGroup parent = getParent((PreferenceGroup)p, preference);
            if (parent != null)
                return parent;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_* S. 5

没有 getCategory() 方法,但您可以使用以下解决方法:如果您不使用 Preference 的依赖属性,您可以将 Preference 设置为依赖于 PreferenceCategory,然后使用 getDependency() 方法。例如:

<PreferenceCategory 
    android:title="MyPrefCat" 
    android:key="category" 
    android:selectable="false">  
    <CheckBoxPreference 
            android:key="chkbox" 
            android:dependency="category" />
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)

在 PreferenceActivity 中,您现在可以使用:

CheckBoxPreference currentPref = (CheckBoxPreference) findPreference("chkbox");
String prefCatKey = currentPref.getDependency();
PreferenceCategory catPref = (PreferenceCategory) findPreference(prefCatKey);
// Access PreferenceCategory's attributes such as its title:
String prefCatTitle = catPref.getTitle().toString();
Run Code Online (Sandbox Code Playgroud)


Sni*_*las 0

我在首选项中没有看到 getCategory 或 getGroup 。

\n\n

但是,您可以使用从http://developer.android.com/reference/android/preference/PreferenceGroup.html继承的 PreferenceCategory\nin 方法

\n\n
getPreference(int index)\n\nint getPreferenceCount()\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于您想要做的事情来说,这确实是一个很长的路要走,但看起来您确实应该重建首选项菜单。

\n\n

其他替代方案是 saxp 您的 xml prefrence 文件。

\n\n

问候,\n St\xc3\xa9phane

\n