2017-06-18 171 views
1

我现在有一个微调在应用程序的第一个活动中包含可用语言列表,我需要重新启动活动来更改应用程序的语言(我正在使用上下文包装)。但我的代码保持“再创造”的活动,它从不停止:重新启动活动在微调onItemSelected

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(); 
     } 

反正是有,我可以重新开始从纺纱项目选择的活动?

回答

1

我的代码保持“再造”活动,它从不停止:

要当心,同时设置onItemSelection听众。只有在初始化微调器后才设置您的监听器,否则当您设置默认项目时,它将执行onItemSelected,并将根据您的代码继续重新创建活动。

+1

哇。明智的答案。 –

+0

我很抱歉有误导性,但这段代码实际上是放在我的微调器的所有其他初始化(包括设置默认项目)之后...... @@ – tboosters

+0

发布完整活动代码 – Darish

0

伙计们,如果你有兴趣,最后我工作围绕onItemSelected()调用的第一个触发通过添加first_trigger标志事件监听器和更换重新创建()如下,一切工作现在罚款:

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); 
     } 
    });