我想为我的应用实现一个设置助手,当用户第一次启动应用时会显示该设置助手。我使用了一个PageViewer,看起来效果很好。
第一页询问用户默认语言。我想在用户从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 :(得分: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();
}
}
});
这是推荐的方式吗?