2012-05-01 3 views
0

В моем приложении я хотел бы установить прослушиватель кликов по отдельным элементам предпочтения в моей активности предпочтений, проблема в том, что я могу только узнать, как установить прослушиватель кликов только на самом главном listprefernce, есть ли способ, которым я может установить ключ для отдельных элементов списка, поэтому, когда я настраиваю OnPreferenceClickListener, я могу выполнить некоторый код определенного элемента списка?Как установить прослушиватель кликов на отдельные элементы списка в android?

ответ

1

убедитесь, что ваш класс предпочтения implements 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; 
} 
+0

так что я должен использовать имена отдельных массивов в качестве ключа здесь? –

+0

yes есть android value 'android: key', что вы задаете имя ключа в xml – tyczj

1

Этот вопрос относительно древний, но я искал, чтобы сделать подобную вещь - специально получить крюк, когда нажимается любой элемент ListPreference. Такие вещи, как onSharedPreferenceChanged, не работали для меня, потому что мне нужно что-то делать, даже когда щелкнули выбранный в настоящее время ListPreference. Я не уверен, что понимаю другой ответ здесь, как решение проблемы. Мой googling не раскрыл никаких других решений.

Я пошел вместе с расширением ListPreference и переопределением onDialogClosed(). Источник ListPreference код onDialogClosed является

@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 
    } 

Это работает для моих целей.

Смежные вопросы