2015-03-14 4 views
3

Я работаю над приложением, где у меня есть задача работать с предпочтением, так реализовано предпочтение переключателя где, если переключатель включен, мне нужно отслеживать контактную базу данных, поэтому я использовал контент-наблюдатель и когда пользователь отключился я должен отменить, что наблюдатель содержание имеют вид на код я реализоватькак отменить регистрацию содержимого в предпочтениях

MyContentObserver observer; 
switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, 
       Object newValue) { 
      boolean switched = ((SwitchPreference) preference) 
        .isChecked(); 

      if(!switched){ 
      // Toast.makeText(SettingActivity.this,"Switch is on",Toast.LENGTH_SHORT).show(); 
      observer=new MyCOntentObserver(); 
       getContentResolver() 
       .registerContentObserver(
         ContactsContract.Contacts.CONTENT_URI, true, 
         observer); 

      } 
       else{ 
      // Toast.makeText(SettingActivity.this,"Switch is off",Toast.LENGTH_SHORT).show(); 

       // getContentResolver().unregisterContentObserver(observer); 
       //here i want a logic that to destroy instance which i created 
       while switch is On 


} 
       return true; 
     } 
    }); 
    public class MyContentObserver extends ContentObserver{ 
      public MyCOntentObserver() { 
       super(null); 
      } 
      @Override 
      public void onChange(boolean selfChange) { 
      super.onChange(selfChange); 
       Log.e("","~~~~~~contact inserted or updated"+selfChange); 
      } 

      @Override 
      public boolean deliverSelfNotifications() { 
       return true; 
      } 
     } 

Любое предложение или помощь будет высоко оценена.

ответ

1

это сделаю. Вам просто нужно вызвать unregisterContentObserver с тем же наблюдателем, чтобы удалить уведомления. Но для того, чтобы избежать erros если observar уже удалены добавить его в примерочных поймать блок

try { 
getContentResolver().unregisterContentObserver(observer); 
} catch (IllegalStateException ise) { 
// Do Nothing. Observer has already been unregistered. 
} 

Вам не нужно уничтожить экземпляр, просто убедитесь, что это синглтон. Поэтому, если пользователь снова включит настройки, вы переработаете этот экземпляр.