0

私のアプリケーションでは、プリファレンスアクティビティの個々のプリファレンスリストアイテムにクリックリスナーを設定したいのですが、問題は、メインリストプリファレンス自体にクリックリスナーを設定する方法しかわからないことです。設定できる方法はありますか?個々のリストアイテムへのキーなので、OnPreferenceClickListenerを設定すると、リストアイテム固有のコードを実行できますか?

4

2 に答える 2

1

設定クラスimplementsOnPreferenceClickListener を確認してからオーバーライドしてから、onPreferenceClickどの設定キーが押されたかを確認してください

@Override
public boolean onPreferenceClick(Preference preference) {
    if (preference.getKey().equals("schedulestart")) {
        showDialog(0);
    } else if (preference.getKey().equals("schedulestop")) {
        showDialog(1);
    } else if (preference.getKey().equals("priority")) {

        getPreferenceManager().getSharedPreferences().edit().putInt("unreadcount", 0).commit();
    }
    return true;
}
于 2012-05-01T02:29:09.050 に答える
1

この質問は比較的古いものですが、私は似たようなことをしようとしていました - 具体的には、ListPreference 項目がクリックされるたびにフックを取得します。現在選択されている ListPreference をクリックしても何かをする必要があるため、onSharedPreferenceChanged のようなものは機能しませんでした。問題を解決するものとして、ここでの他の答えを理解しているかどうかはわかりません。私のグーグルは、他の解決策を発見していません。

私は ListPreference を拡張し、onDialogClosed() をオーバーライドしました。onDialogClosed の ListPreference ソース コードは次のとおりです。

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);

        if (positiveResult && mClickedDialogEntryIndex >= 0 && mEntryValues != null) {
            String value = mEntryValues[mClickedDialogEntryIndex].toString();
            if (callChangeListener(value)) {
                setValue(value);
            }
        }
    }

新しい ListPreference で選択したリスト項目の値を送信するための作業インターフェイスを作成し、onDialogClosed をオーバーライドしました。

public class MyListPreference extends ListPreference {

    private ListItemClickListener mListItemClickListener;

...

    public void setOnListItemClickListener(ListItemClickListener listener) {
        mListItemClickListener = listener;
    }

    public interface ListItemClickListener {
        public void onListItemClick(String value);
    }
...

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);

        if (positiveResult && getEntryValues() != null && mListItemClickListener != null) {
            String value = getValue();
            mListItemClickListener.onListItemClick(value);
        }
    }

次に、設定アクティビティ (または新しい ListPreference を使用している場所) で、次のようにフックします。

    @Override
    protected void onResume() {
        super.onResume();

        MyListPreference listPref = (MyListPreference)
                findPreference(getString(R.string.key_name));
        listPref.setOnListItemClickListener(this);    
    }

    ...
    public void onListItemClick(String value) { 
    // Do something
    }

これは私の目的のために機能します。

于 2015-06-22T22:59:10.677 に答える