如何在android中设置单个listpreference项的单击侦听器?

如何在android中设置单个listpreference项的单击侦听器?,android,android-preferences,Android,Android Preferences,在我的应用程序中,我想在我的首选项活动中的各个首选项列表项上设置一个单击侦听器,问题是我只能找到如何仅在主列表首选项本身上设置单击侦听器,是否有一种方法可以设置单个列表项的键,以便在设置OnPreferenceClickListener时可以执行一些特定于列表项的代码 确保您的首选项类实现OnPreferenceClickListener,然后覆盖onPreferenceClick,然后只需检查按下的首选项键 @Override public boolean onPreferenceClick(

在我的应用程序中,我想在我的首选项活动中的各个首选项列表项上设置一个单击侦听器,问题是我只能找到如何仅在主列表首选项本身上设置单击侦听器,是否有一种方法可以设置单个列表项的键,以便在设置OnPreferenceClickListener时可以执行一些特定于列表项的代码

确保您的首选项类
实现
OnPreferenceClickListener,然后覆盖
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;
}

这个问题相对来说比较古老,但我想做一件类似的事情——特别是在单击任何ListPreference项时,都可以获得一个钩子。onSharedPreferenceChanged之类的操作对我不起作用,因为即使单击了当前选定的ListPreference,我也需要执行一些操作。我不确定我是否理解这里的另一个答案是解决问题。我的谷歌搜索没有发现任何其他解决方案

我同意扩展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
    }

这是出于我的目的。

那么我应该在这里使用单个数组名作为键吗?是的,有一个android值
android:key
,您在xml
androidx
中设置键名,但它没有提供
onDialogClosed