2016-07-27 94 views
1

我正在開發Android應用程序。以下代碼正常工作,但是當我按MainActivity時通過BackPress按鈕。如何在首選項更改或語言更改(語言環境)上刷新Android應用程序

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     Configuration config = getBaseContext().getResources().getConfiguration(); 

     String lang = settings.getString("lang_list", ""); 
     if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang)) { 
      recreate(); 
      Locale locale = new Locale(lang); 
      Locale.setDefault(locale); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
     } 

當我改變我的應用程序的語言從MultiListPreference它給出了導致錯誤

:java.lang.ClassCastException:android.preference.ListPreference不能轉換到android.preference.MultiSelectListPreference

而我的應用程序崩潰..

請各位看看下面代碼..

final MultiSelectListPreference lang_list= (MultiSelectListPreference) findPreference("lang_list"); 
      if(news_category_list!=null) 
      { 
       news_category_list.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
        @Override 
        public boolean onPreferenceChange(Preference preference, Object o) { 
         AppController.getInstance().notifyPrefrenceChanged(true); 
         //Log.d("on change","change"); 
         lang_list.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
          @Override 
          public boolean onPreferenceChange(Preference preference, Object newValue) { 
           startActivity(new Intent(getActivity(),getActivity().this)); 
           return false; 
          } 
         }); 
         return true; 
        } 
       }); 
      } 

如何以選定的新語言刷新屏幕。選擇新語言後,我不想去MainActivity。當我選擇另一種語言時,只需使用當前屏幕刷新頁面即可。

請幫我這個代碼。 當我選擇ListPreference中列出的任何語言選項時,如何刷新/重新創建應用程序(或活動)?

謝謝!

+0

我不知道解決方案,因爲我不是很習慣Android API,但是你的呃ror很容易被發現。 findPreference返回一個ListPreference並將其轉換爲MultiSelectListPreference。爲什麼你需要一個MultiSelectListPreference? –

+0

我正在給multilistpreference中的語言選項。 –

+0

那麼,你需要改變你的findPreference方法,因爲它不返回multilistpreference(或使用裝飾器模式從首選項中創建一個新的multilistpreference –

回答

0

要轉到一個特定的活動提類明確:

更換

startActivity(new Intent(getActivity(),getActivity().this)); 

startActivity(new Intent(getActivity(), TargetActivity.class)); 

TargetActivity的線之上會是你想去的活動)

+0

我用'MainActivity .class',並且它使應用程序崩潰,順便說一下,我的TargetActivity是當前活動,我只是想在從ListPreference中選擇另一種語言時更改頁面的語言。 –