2012-04-14 105 views
0

我正在研究一种可以通过其他手机通过短信控制的Android应用程序。我使用PreferenceScreen作为布局(设置应用程序的一部分)。调用onResume()时更新布局。动态更新接口

当通过其他手机发送命令(SMS)时,在后台运行的服务窥探传入的短信并更改保存在SharedPreferences中的设置。为了查看这些更改,我的活动需要执行onResume中的代码。如果我回到以前的活动并回来,我可以看到变化。

我想要通过运行服务更改SharedPreferences并尽快显示更改。我该怎么做才能做到这一点?

回答

1

事情是这样的:

public class MyActivity extends Activity implements OnSharedPreferenceChangeListener 
{ 
    public static final String PREFS_NAME = "MyPrefsFile"; 

    @Override 
    protected void onCreate(Bundle state) 
    { 
     /* get shared preferences */ 
     SharedPreferences mySharedPreferences = getSharedPreferences(PREFS_NAME, 0); 

     /* register listener for changes to the values within the shared preferences */ 
     mySharedPreferences.registerOnSharedPreferenceChangeListener(this); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    { 
     /* perform application processing */ 
     ... 

     /* update layout */ 
     View myView = findViewById(id.my_view); 

     /* invalidate the view causing it to be redrawn */ 
     myView.invalidate(); 
    } 
} 
+0

thanku快速响应。如果对与mySharedPreferences关联的对象进行更改,则此代码有效。在我的服务中,我创建了一个SharedPreferences的新实例。因此,如果在服务中进行更改,则不会调用当前Activity中的onSharedPreferenceChanged! – 2012-04-14 01:15:29

+0

请点击这里:[如何让Android服务与活动进行通信](http://stackoverflow.com/questions/2463175/how-to-have-android-service-communicate-with-activity) – flukey 2012-04-14 02:15:53

+0

我用代码解决了但是,这是问题http://stackoverflow.com/questions/10150480/registeronsharedpreferencechangelistener-not-working-for-changes-made-in-differe – 2012-04-14 02:26:01