2014-02-11 50 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