2017-06-18 7 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

みんな私はイベントリスナーにfirst_triggerフラグを追加することにより、onItemSelected()呼び出しの最初のトリガの周りに働いて、次のように、すべてが正常動作するようになりました)(再作成を交換し、最後に、興味を持っている場合:

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); 
     } 
    }); 
関連する問題