2015-03-13 3 views
0

Мне нужно обновить виджет моего приложения каждый раз, когда настройки будут изменены пользователем.Обновление виджета при изменении настроек с помощью настраиваемой широковещательной рассылки

У меня есть деятельность настройки:

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 

public class SettingsActivity extends Activity implements SharedPreferences.OnSharedPreferenceChangeListener { 

public static final String customIntent = "CUSTOM_SETTINGS_CHANGED"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Display the fragment as the main content. 
    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new MainActivity.SettingsFragment()) 
      .commit(); 
} 

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
             String key) { 
    Intent intent = new Intent(); 
    intent.setAction(customIntent); 
    this.sendBroadcast(intent); 
    } 
} 

Я добавил, что обычай намерение манифеста:

<action android:name="CUSTOM_SETTINGS_CHANGED" /> 

Но виджет не обновляется сразу после изменения настроек. Поэтому моя обычная передача не отправляется или не принимается. Что случилось с моим кодом?

+1

Показать манифест. –

+0

@ci это не так, все остальные намерения для одного и того же приемника работают нормально. –

ответ

0

Я использовал другой подход.

В моей основной деятельности Я добавил это:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    <...> 
    SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
      Intent intent = new Intent(); 
      intent.setAction(customIntent); 
      sendBroadcast(intent); 
     } 
    }; 
    <...> 
} 

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

0

// this part important in manifest declaration 
 
package com.xmpls.onetwothree.abc; 
 

 
import android.app.Activity; 
 
import android.content.Intent; 
 
import android.content.SharedPreferences; 
 
import android.os.Bundle; 
 

 
public class SettingsActivity { 
 

 

 
    public class SettingsActivity extends Activity implements 
 
      SharedPreferences.OnSharedPreferenceChangeListener { 
 
     // Change like this 
 
     public static final String CUSTOM_SETTINGS_CHANGED = "com.xmpls.onetwothree.abc.custompls"; 
 

 
     @Override 
 
     protected void onCreate(Bundle savedInstanceState) { 
 
      super.onCreate(savedInstanceState); 
 

 
      // Display the fragment as the main content. 
 
      getFragmentManager().beginTransaction(); 
 
      /* More code here. . .*/ 
 
     } 
 
     /* And some here. . .*/ 
 
    } 
 
================================================================================ 
 
and in manifest U must registred ACTION like this: 
 
<action android:name="com.xmpls.onetwothree.abc.CUSTOM_SETTINGS_CHANGED" />

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

  • Нет связанных вопросов^_^