2

现在我有一个 PreferenceActivity 和一个 PreferenceFragment。该活动只定义了 onBuildHeaders,它加载了一个 XML 文件,该文件具有一个根对象的首选项标头,然后是它的几个子标头。每个标题都指向 PreferenceFragment 和一个包含屏幕、类别和首选项的 XML 文件。

问题是,这个系统只有 2 层深。左侧面板上有标题,然后该标题的所有内容都在右侧面板的单个列表中。对于某些标头,只有十几个选项,因此可以正常工作。对于其他标题,有 100 多个首选项,这是相当压倒性的,滚动和扫描,以及设备加载(点击打开和打开之间有明显的延迟。)

有什么办法可以让我拥有多层吗?我认为在左侧,用户将能够通过标题“向下钻取”(主要是我在 iOS 中听到的一个术语,IDK 在 Android 中这个术语有多常见),直到它们达到实际存储偏好的级别和右侧面板上有显示吗?

编写我自己的完全自定义系统似乎可行,但耗时。我希望有人知道一些内置的 API,它们将为我实现 3 或 4 层向下钻取首选项。

在有人问之前,是的,我确实需要有这么多偏好(~500)。我被指示制作首选项菜单并给出项目列表(可以很容易地分为 3 或 4 层。)

4

1 回答 1

1

这实际上很容易。在根标题打开的 XML 文件中,我添加了一个 Preference 项并将 android:fragment 设置为我的 PreferencesFragment 类。为了阐明我的整个系统是如何工作的,我有:

public class MyPreferencesActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> targer) {
        loadHeadersFromResource(R.xml.preference_headers, target);
    }

preference_headers 然后看起来像这样:

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
    <header android:fragment="com.my.androidapp.MyPreferencesFragment" title="General Category >
        <extra android:name="resource" android:value="preferences_general" />
    </header>
    <header... one per category, different titles and extra values for each.
</preference-headers>

MyPreferenceFragment 看起来像这样:

public class MyPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String name = getArguments().getString("resource");
        int res = getActivity().getResources().getIdentifier(name, "xml", getActivity().getPackageName());
        addPreferencesFromResource(res);

最后,我的首选项文件如下所示:

<PreferenceScreen blah...>
    <Preference android:fragment="com.my.androidapp.MyPreferenceFragment" android:title="Drill Down!">
        <extra android:name="resource" android:value="preferences_subgeneral" />
    </Preference>
    <Preference... whatever I want... I can use ordinary preferences or any number of items that can be selected to drill down further still.
</PreferenceScreen>

希望这可以帮助其他人,尤其是其他有大量偏好的人。

于 2012-07-30T20:58:49.880 回答