2017-02-14 14 views
0

私は、ユーザーが初めてアプリを起動したときに表示されるアプリの設定アシスタントを実装したいと考えています。私はこれをうまく動作するように見えるPageViewerを使用します。Android RadioGroup onCheckedChangedは、リフレッシュするときに何度も呼び出されます。

最初のページでは、ユーザーにデフォルト言語を尋ねます。ユーザーがラジオグループから言語を選択すると、そのページを更新したいと思います。だから私は選択された言語でフラグメントをリロードする方法が必要です。

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()でリロードしようとします。

問題は次のとおりです.1つのラジオボタンを押すとすぐに、「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(); 
     } 
    } 
}); 

これはお勧めの方法ですか?

関連する問題