Android中的多层首选项?

时间:2012-07-30 18:09:00

标签: android android-listview android-preferences

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

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

我有什么方法可以有多层?我在左边的数字中,用户可以通过标题“向下钻取”(大部分是我通过iOS听到的术语,IDK与Android的术语有多常见),直到它们达到实际存储偏好的级别为止。在右侧面板上显示?

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

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

1 个答案:

答案 0 :(得分: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>

希望这有助于其他人,特别是其他有大量偏好的人。