我现在在应用程序的第一个活动中有一个微调器,其中包含可用语言列表,我需要重新启动活动以更改应用程序的语言(我正在使用上下文包装器)。但我的代码保持"重新创建"活动,它永远不会停止:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
Session.setLang(position);
String name = lang_name[position];
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
editor.putString("locale", name);
editor.commit();
recreate();
}
无论如何我可以从微调器项目选择中重新启动活动吗?
答案 0 :(得分:1)
我的代码不断“重新创建”活动,它永远不会停止:
设置onItemSelection侦听器时要小心。仅在初始化微调器后设置监听器,否则当您设置默认项时,它将执行onItemSelected
并将根据您的代码继续重新创建活动。
答案 1 :(得分:0)
大家,如果你感兴趣的话,最后我通过在事件监听器中添加first_trigger标志来解决onItemSelected()调用的第一个触发器,并替换了recreate(),如下所示,现在一切正常:
lang_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
boolean first_trigger = true;
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
LoginSession.setLang(position);
if(first_trigger){
first_trigger = false;
}else{
String name = lang_name[position];
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
editor.putString("locale", lang_name);
editor.commit();
Intent intent = new Intent(getBaseContext(), Login.class);
startActivity(intent);
overridePendingTransition(0,0);
finish();
overridePendingTransition(0,0);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent){
LoginSession.setLang(0);
}
});