2011-10-17 33 views
6

Trong ứng dụng android của tôi, tôi có hoạt động tùy chọn cho phép người dùng ghi đè ngôn ngữ của ứng dụng. Để đạt được điều này, tôi gọi hàm này trong onResume của mọi hoạt động() và sau đó đặt lại chế độ xem nội dung:Ngôn ngữ cập nhật Android trong hoạt động ưu tiên

Trong mọi hoạt động, nó hoạt động hoàn toàn tốt. Tuy nhiên, trong hoạt động ưu tiên, khi người dùng thay đổi ngôn ngữ, nó không được cập nhật ngay lập tức, bởi vì không có phương thức setContentView(). Người dùng phải quay lại hoạt động trước đó và bắt đầu lại hoạt động tùy chọn để xem thay đổi ngôn ngữ được phản ánh.

Tôi đã thử các sau đây trong một onPreferenceChange() nghe:

  1. Cập nhật cấu hình, loại bỏ và readding các ưu đãi:

    checkOverrideSystemLanguage(this);  
    // Remove all preferences and add them to update the language 
    getPreferenceScreen().removeAll(); 
    addPreferencesFromResource(R.xml.preferences); 
    
  2. Cập nhật cấu hình và gọi onCreate (null)

  3. Hoàn tất và khởi động lại hoạt động

    finish(); 
    startActivity(new Intent(this, PreferencesActivity.class)); 
    

Cảm ơn sự giúp đỡ của bạn!

+0

Bạn có thể sử dụng một chút hack và gọi getActionBar(). SetTitle ("tiêu đề của bạn") bằng một số phương pháp bạn gọi lúc đầu –

Trả lời

1

Tôi gặp sự cố tương tự, tôi đã giải quyết theo cách này (như bạn đã nói: hoàn tất và khởi động lại hoạt động). Nó hoạt động!

public class OptionsActivity extends PreferenceActivity implements YesNoDialogPreference.YesNoDialogListener, SharedPreferences.OnSharedPreferenceChangeListener { 

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

     //Options Setting 
     final SharedPreferences prefs = getSharedPreferences(OptionsUtility.PREFERENCE_NAME, MODE_PRIVATE); 
     String language = prefs.getString(OptionsUtility.PREFERENCE_LANGUAGE, OptionsUtility.DEFAULT_LANGUAGE); 

     //Update locale 
     OptionsUtility.updateLanguage(this, language); 
     prefs.registerOnSharedPreferenceChangeListener(this); 

     getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE); 
     getPreferenceManager().setSharedPreferencesName(OptionsUtility.PREFERENCE_NAME); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 

     Preference eraseGameButton = getPreferenceManager().findPreference(OptionsUtility.PREFERENCE_ERASE_GAME); 
     if (eraseGameButton != null) { 
      YesNoDialogPreference yesNo = (YesNoDialogPreference)eraseGameButton; 
      yesNo.setListener(this); 
     } 

     Preference configureKeyboardPref = getPreferenceManager().findPreference("keyconfig"); 
     if (configureKeyboardPref != null) { 
      //KeyboardConfigDialogPreference config = (KeyboardConfigDialogPreference)configureKeyboardPref; 
      //config.setPrefs(getSharedPreferences(MemodroidCoreActivity.PREFERENCE_NAME, MODE_PRIVATE)); 
      //config.setContext(this); 
     } 

    } 


    public void onDialogClosed(boolean positiveResult) { 
     if (positiveResult) { 
      DatabaseScoreManager dbsManager = new DatabaseScoreManager(getApplicationContext()); 
      dbsManager.resetHighScores(); 
      Toast.makeText(this, R.string.toast_highScoresReset,Toast.LENGTH_SHORT).show(); 
     } 
    } 


    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { 
     restartActivity(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
    } 

    private void restartActivity() { 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 
    } 

    @Override 
    public void onBackPressed() { 
     finish(); 
    } 
} 
Các vấn đề liên quan