3

個々のリスナーをアイテムに追加しようとしてListPreferenceいますが、それを行うための適切なコードが見つかりません。

たとえば、地域 を設定する必要があるアプリがあるとします。したがってListPreference、3 つのオプションがあります。アメリカ、アジア、ヨーロッパ。

トラックパッドを使用してアイテムをスクロールするときに、フォーカスを取得したときに設定のテキストを読み上げるようにしたいと考えています。

API のどこかに個々のアイテムにリスナーを追加できると確信していますが、それが見つかりません。(から継承) にsetOnPreferenceClickListener(..)メソッドがありますが、それは実際の親設定項目を選択するときのものです。ListPreferenceDialogPreference

特別なサブクラスを書く必要がありますか?

編集

これをさらに調べた後、質問をさらに明確にする必要があると思います。onPreferenceTreeClick (PreferenceScreen prefScreen, Preference pref)プリファレンスを使用する場合、 のメソッドをオーバーライドできますPreferenceActivity。これにより、設定のクリックを傍受できます。ただし、ポップアップする実際のダイアログにリスナーを追加したいと考えています。上記の例の「アメリカ、アジア、ヨーロッパ」オプション。したがって、アジアを選択またはクリックすると、それを傍受できます。

したがって、私の(洗練された)質問は、これらの個々のオプションにリスナーを追加する方法です。

乾杯

4

3 に答える 3

2

OnSharedPreferenceChangeListener は、sharedPref 値が変更された後、persistent = true の場合に呼び出されますが、各アイテムに対して実際には独自の OnPreferenceChangeListener を割り当てることができ、どのアイテムがクリックされたかを確認できます。

ListPreference pLocAuto = (ListPreference) findPreference(PREF_LOC_AUTO);
pUpdateAuto.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                System.out.print(newValue.toString());
                return false;
            }
        });
于 2012-08-07T11:56:40.833 に答える
0

これに似たstackoverflowに関する別の投稿があると思います: Custom Row in a ListPreference

この場合、サブクラス化が解決策です。しかし、あなたの場合、単純なListAdapter.

アダプターをセットアップした場合は、メソッドonItemClickを使用でき、メソッド内でswitchステートメント (case配列内の ID またはインデックスなど) を使用して、さまざまなメソッドを呼び出すことができます。

私はあなたの質問を理解したと思います... :)

ああ!onFocusChangeまた、 Listenerも確認する必要があります。このリスナーをすべての設定項目 (ビューである必要があります。アダプターにリスナーを追加します) に追加してから、リスナー メソッドに通知された switch ステートメントを含めることができます。

こんにちは。ヒントを提供できれば幸いです。

ジュリアン

于 2011-02-17T17:18:24.493 に答える