2017-06-18 220 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); 
     } 
    });