2016-07-27 71 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中选择另一种语言时更改页面的语言。 –