2017-02-14 3 views
0

Я хочу реализовать помощник по настройке для своего приложения, которое отображается, когда пользователь запускает приложение в первый раз. Для этого я использую PageViewer, который работает нормально.Android RadioGroup onCheckedChanged вызывается снова и снова при обновлении Фрагмент

На первой странице запрашивается пользователь по умолчанию. Я хочу обновить страницу, когда пользователь выбирает свой язык из RadioGroup. Поэтому мне нужен способ перезагрузить фрагмент на выбранном языке.

public class SetupAssistantLanguageFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.setup_language_fragment, container, false); 

     ((RadioGroup) view.findViewById(R.id.setup_language_radiogroup)).setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup radioGroup, int i) { 
       String langcode = ""; 
       if (i == R.id.setup_fragment1_languagechooser_en) { 
        langcode = "en"; 
       } else { 
        langcode = "de"; 
       } 

       ((SetupAssistantActivity) getActivity()).changeLanguage(langcode); 
       SetupAssistantLanguageFragment.this.refreshView(); 
       System.out.println("test1"); 
      } 
     }); 

     return view; 
    } 

    public void refreshView() { 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.detach(this).attach(this).commit(); 
     System.out.println("test2"); 
    } 
} 

Изменение языка работает, но только для страниц, следующих за первой страницей. Это связано с тем, что фрагмент необходимо перезагрузить, когда язык изменился. Я пытаюсь перезагрузить в refreshView().

Проблема: как только я нажимаю одну радиокнопку, я получаю бесконечную печать цикла «test1» и «test2». Почему этот метод называется снова и снова?

Как я могу перезагрузить фрагмент ровно один раз?

ответ

0

Я получил его:

В моем фрагменте я первый сохранить текущий язык.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    currentDisplayLang = getResources().getConfiguration().locale.getLanguage(); 
} 

В onCreateView Я только обновляю фрагмент, когда язык действительно изменился.

((RadioGroup) view.findViewById(R.id.lecture_translator_setup_language_radiogroup)).setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(RadioGroup radioGroup, int i) { 
     String chosenLangcode = i == R.id.setup_fragment1_languagechooser_en ? "en" : "de"; 

     if (!chosenLangcode.equals(currentDisplayLang)) { 
      currentDisplayLang = chosenLangcode.toString(); 
      ((SetupAssistantActivity) getActivity()).changeLanguage(chosenLangcode); 
      SetupAssistantLanguageFragment.this.refreshView(); 
     } 
    } 
}); 

Это рекомендуемый способ?

Смежные вопросы