我正在尝试以编程方式打开PreferenceCategory中存在的ListPreference。 XML结构类似于:

<PreferenceScreen
    android:key="pref_screen" >

    <PreferenceCategory
        android:title="Category"
        andorid:key="pref_category">
        <ListPreference
            android:key="pref_list"
            android:title="List" />
    </PreferenceCategory>
</PreferenceScreen>

我的目标是以编程方式打开“pref_list”,并将其显示给用户。我研究了this主题,提供了以下解决方案:
// the preference screen your item is in must be known
PreferenceScreen screen = (PreferenceScreen) findPreference("pref_screen");

// the position of your item inside the preference screen above
int pos = findPreference("pref_list").getOrder();

// simulate a click / call it!!
screen.onItemClick( null, null, pos, 0 );

这对于没有PreferenceCategory的PreferenceScreen效果很好,但是我无法使其适用于我的情况(当ListPreference位于PreferenceCategory内部时)。

如何针对我的情况进行修改?还是有其他解决方案?

我在PreferenceCategory中找不到类似于PreferenceScreen的onItemClick()的方法。为我的PreferenceCategory的getOrder()值更改'pos'效果不佳。

最佳答案

我知道这是一个非常旧的线程,但是我也遇到了类似的问题,因此我在此基于this的简短解决方案

    ListAdapter listAdapter = getPreferenceScreen().getRootAdapter();

    for (int itemNumber = 0; itemNumber < listAdapter.getCount(); itemNumber++)
        if (listAdapter.getItem(itemNumber).equals(findPreference("pref_list")))
            getPreferenceScreen().onItemClick(null, null, itemNumber, 0);

10-08 18:14