2012-07-30 17 views
2

现在我有一个PreferenceActivity和一个PreferenceFragment。该活动仅包含onBuildHeaders定义的内容,并加载一个XML文件,该文件具有首选项的根对象,然后加载其头部的多个子项。每个标题指向PreferenceFragment和包含屏幕,类别和首选项的XML文件。Android中的多级首选项?

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

Is there任何方式我可以有多个层?我认为左边的用户可以通过标题“钻取”(主要是我听说过的一个术语,IDK是Android的一个术语),直到它们达到实际存储偏好的水平,在右侧面板上显示?

写我自己的完全自定义系统似乎是可行的,但费时。我希望有人知道一些内置的API可以为我实现3或4层深入的首选项。

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

+0

500似乎有很多喜好。为什么不简单地在更小的群体中打破这些偏好并使用当前的系统? – Luksprog 2012-07-30 18:34:35

+0

我的首选项目是“常规”,“个性化”,“数据收集”,“图形”,“配置”和“关于”。配置是真正需要分解的配置。它包含300多种偏好,我可以将其分成20类。虽然这是真的,但我可以将这20个类别添加到顶部列表中,看起来像拥有“常规”,“个性化”,“数据收集”,“图形”,20个不同的“配置(名称)”,和“关于”。我宁愿用户选择“配置”,然后查看他们可以配置的事情列表,然后设置每个事物的首选项。 – ArtOfWarfare 2012-07-30 18:42:51

+0

应用程序的设置部分应该是简单的东西,而不是压倒用户的东西(确切地说,当用户必须从gazillion选项中选择时会发生什么)。您不必将名称命名为配置(名称),只需使用这些特定分组设置的代表名称即可。如果你坚持你的最初目标,我会做一个正常的活动,并按照我想要的水平来构建它。 – Luksprog 2012-07-30 18:53:55

回答

2

这实际上很简单。在根文件头打开的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> 

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

+0

我目前被卡住了,因为我也想在我的应用程序中使用多层设置。当然,可以按照您的建议进行操作,但在我的情况下,当我在平板电脑上打开应用程序时,左侧显示我的顶级设置,右侧显示所选顶级项目的详细设置。 当我现在选择一个项目来打开第三级设置时,它会以全屏方式打开,并且ActionBar已经消失。 有没有办法只是替换拆分窗格的右侧内容或至少显示ActionBar?或者,这完全是Android设计规则? :/ – xxtesaxx 2016-05-10 02:31:08