现在我有一个PreferenceActivity和一个PreferenceFragment。该活动只定义了onBuildHeaders,并且它加载了一个XML文件,该文件的根对象为preference-headers,然后是几个子文件,它们是标题。每个标题指向PreferenceFragment和包含屏幕,类别和首选项的XML文件。
问题是,这个系统只有2层深。左侧面板上有标题,然后该标题的所有内容都在右侧面板的单个列表中。对于某些标题,只有十几个选项,所以它可以正常工作。对于其他标题,有100多个首选项,这对于滚动和扫描以及要加载的设备都是相当大的(在点击打开和打开之间会有明显的延迟。)
我有什么方法可以有多层?我在左边的数字中,用户可以通过标题“向下钻取”(大部分是我通过iOS听到的术语,IDK与Android的术语有多常见),直到它们达到实际存储偏好的级别为止。在右侧面板上显示?
编写我自己的完全自定义系统似乎是可行的,但耗时。我希望有人知道一些内置的API,它们将为我实现3或4层向下钻取首选项。
在有人问之前,是的,我确实需要这么多的偏好(~500)。我被指示制作首选项菜单并给出项目列表(可以很容易地分为3或4层。)
答案 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>
希望这有助于其他人,特别是其他有大量偏好的人。