2016-07-27 2 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

Я не знаю решение, потому что я не очень привык к API Android, но ваш ror легко заметить. findPreference возвращает ListPreference, и вы передаете его в MultiSelectListPreference. Зачем вам нужен MultiSelectListPreference? –

+0

Я даю варианты языка в multilistpreference .. –

+0

Ну, тогда вам нужно изменить свой метод findPreference, потому что он не возвращает multilistpreference (или используйте шаблон декоратора, чтобы сделать новую многолистную ссылку из предпочтения –

ответ

0

Чтобы перейти к конкретной деятельности упомянуть класс явно:

Заменить

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

с

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

(TargetActivity в строке выше будет активность вы хотите пойти)

+0

Я заменяю это на 'MainActivity .class', и он разбивает приложение. Кстати, моя TargetActivity - это текущая активность. Я просто хочу изменить язык страницы, когда я выбираю другой язык из «ListPreference». –