2015-10-20 41 views
-2

中工作如果我更改活動示例中的任何內容或顏色的示例,我有一個疑問,我有一個帶有來自共享首選項的數據「apple」的textview。我點擊一個按鈕開始新的activity2那裏我點擊一個按鈕來更新共享首選項「apple」到「gova」我點擊activity2中的textview後退按鈕應該更新。有沒有辦法更新沒有onResume()方法或解釋如何onResume()工作...?onResume()在android

+0

使用'startActivityForResult() '並更新'onActivityResult'中的值。請參閱http://stackoverflow.com/a/10407371/1979347 –

+0

請閱讀[有關Android活動生命週期的官方文檔](http://developer.android.com/training/basics/activity-lifecycle/pausing.html) ,除非你想用'startActivityForResult()'使自己複雜化(如果使用正確,這很好),請使用'onResume()'來代替。 –

+0

嗨同樣的另一個問題,我有一個綠色的TextView。點擊一個按鈕後,我將textview顏色更改爲紅色。我最小化該應用程序,並再次從最近從移動的textview顏色顯示爲綠色打開。怎麼樣....? – android

回答

-1

您應該理想地使用onBackPressed而不是onResume。下面是類似的路線的代碼片段應該幫助

@Override 
public void onBackPressed() { 
new AlertDialog.Builder(this) 
    .setTitle("Really go back?") 
    .setMessage("Are you sure you want to?") 
    .setNegativeButton(android.R.string.no, null) 
    .setPositiveButton(android.R.string.yes, new OnClickListener() { 

     public void onClick(DialogInterface arg0, int arg1) { 
      Activity1.super.onBackPressed(); 
      //change sharedPreferences here 
     } 
    }).create().show(); 
} 

希望這有助於

+0

此答案不正確,如果用戶未更新該值,該怎麼辦?我不明白在這種情況下使用'onBackPressed()'。 –

+0

這個調用中總是可以包含IF語句,以檢查sharedPreferences值是否等於當前選擇。 – BountyHunter

+0

這個函數會進入第二個活動不是嗎?如何在此代碼的第一個活動中將「apple」更新爲「gova」? –

0

onResume()被稱爲你的活動是顯示給用戶的每一次。因此,如果用戶轉到其他活動並返回到第一個活動,則會調用onResume()。你的代碼應該是這樣的:

@Override 
protected void onResume() { 
    super.onResume(); 
    myTextView.setText(preferences.getString("myKey", "defaultValue"); 
} 

如果因任何原因,你不希望使用的onResume(),你可以註冊一個OnSharedPreferenceChangeListener,它都會被調用的共享PREF值被改變的時間。

您的第一項活動將包括代碼看起來像這樣:

public class MainActivity extends AppCompatActivity { 

SharedPreferences preferences; 
SharedPreferences.OnSharedPreferenceChangeListener listener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 

    preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
      if (key.equals("myKey")) { 
       // update your textview 
      } 
     } 
    }; 
    preferences.registerOnSharedPreferenceChangeListener(listener); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    preferences.unregisterOnSharedPreferenceChangeListener(listener); 
} 
} 
+0

雖然每次共享前置碼的值被改變時都會調用OnSharedPreferenceChangeListener,但是如何使用它更新Activity 1的TextView上的文本? –

+0

@AndrewT。有什麼問題? 'OnSharedPreferenceChangeListener'在第一個活動中被聲明和註冊。從第一個活動的角度來看,我們不關心其他活動中發生了什麼,我們只知道如果共享的pref值發生更改,我們會相應地更新「TextView」。 –

+0

沒問題,因爲我覺得這有點不尋常,而且我只是從你的答案中知道這個方法。我沒有測試過這個代碼,但是它會起作用,因爲'Activity1'不在前臺? –

-1

只是覆蓋onBackPressed方法在第二個活動,並在它的值設置爲共享偏好:

@Override 
public void onBackPressed() { 
    // Set shared preference value 
} 
+0

請仔細閱讀這個問題。更改共享首選項值**不會自動更新「TextView」的文本。 –

+0

@AndrewT。 TextView已經設置了共享首選項。 – SANAT