6

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」をプログラムで開き、ユーザーに表示することです。このトピックを調べて、このソリューションを提供しました:

// 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の値の 'pos' を変更getOrder()しても機能しませんでした。

4

2 に答える 2

1

私はそれが非常に古いスレッドであることを知っていますが、私はちょうど同様の問題を抱えていたので、ここにこれに基づく私の短い解決策があります

    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);
于 2015-10-10T17:15:23.833 に答える
-1

指のタッチをシミュレートする別のソリューションを提供します。

View.getLocationOnScreen()and/orを使用しgetLocationInWindow()て、リスト項目の位置を取得します。したがって、クリックをシミュレートするawidthと aを見つけることができます。height

    MotionEvent me=MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, width, height, 0);
    rootView.dispatchTouchEvent(me);
    me=MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, width, height, 0);
    rootView.dispatchTouchEvent(me);
    me.recycle();
于 2013-03-28T08:51:13.623 に答える