2014-02-11 32 views
0

我想在我的首选项更新后调用我的主要活动类中的函数,但因为我有其他类会触发onResume(我相信)。更新偏好设置后,从Activity Class中调用函数Android

段从AndroidGPSTrackingActivity.java

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.settings: 
     startActivity(new Intent(this, SettingsActivity.class)); 
     break; 
    } 
    return false; 
} 

SettingsActivity.java

package com.example.gpstracking; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class SettingsActivity extends PreferenceActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

我的喜好结束后,我想从我的主要活动调用一个函数,但它必须是我的主要活动是因为我需要从我的主要活动发送一个上下文。我已经尝试了很多,但似乎无法得到它。

回答

0

onResume()Activity到达前台时被触发。除了离开/返回活动(如果您曾经直接拨打onResume(),您做错了),您不应该“触发”onResume()

假设您在返回活动时需要检查更新后的值,那么yes,onResume()就是您应该这样做的地方。如果用户在查看SettingsActivity后返回到MainActivity,那么onResume()将被调用,您可以在那里检查更新后的首选项值。

编辑:所以我认为你应该更好地检查onResume()中的偏好值,而不是全局缓存它们。他们看起来并不昂贵。此外,对于即时通知,您可以注册倾听者以进行偏好更改,如下所示:

public class MainActivity extends Activity 
     implements SharedPreferences.OnSharedPreferenceChangeListener { 

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

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     unregisterPreferenceListener(); 
    } 

    private void registerPreferenceListener() { 
     PreferenceManager.getDefaultSharedPreferences(this) 
       .registerOnSharedPreferenceChangeListener(this); 
    } 

    private void unregisterPreferenceListener() { 
     PreferenceManager.getDefaultSharedPreferences(this) 
       .unregisterOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(
      SharedPreferences sharedPreferences, String key) { 
     if ("the_key_i'm_interested_in".equals(key)) { 
      // Update stuff 
     } 
    } 
} 
+0

如果我来自其他活动,但该怎么办?然后我不想'onResume()'被调用。 – Pachonk

+0

'onResume()'在被引入前台时总是会被调用,而不管哪条路径将您带到那里。 – kcoppock

+0

http://developer.android.com/training/basics/activity-lifecycle/index.html – kcoppock