2012-08-31 5 views
3

드롭 다운 메뉴 목록에서 언어 기반을 변경하고 싶습니다. 그러나이 코드는 제대로 작동하지 않습니다. 이 문제를 보여줍니다. Window already focused, ignoring focus gain of: [email protected].초점이 맞지 않는 창은 이미 초점을 맞추고 있습니다. [email protected]

어디에서 문제인지는 알 수 없습니다. 제발 도와주세요.

public class LanguageChangedActivity extends Activity { 
/** Called when the activity is first created. */ 

private static String[] rangeArray = new String[] { "English", "Franch", 
     "Japanies" }; 
private Spinner rangeSpinner; 
String tempRange = ""; 
String languageToLoad = ""; 
boolean isFirstTime = true; 
int posit=0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // rangeArray = getResources().getStringArray(R.array.rangeArray); 

    languageToLoad = "en"; // your language 
    // Locale locale = new Locale(languageToLoad); 
    // Locale.setDefault(locale); 
    // Configuration config = new Configuration(); 
    // config.locale = locale; 
    // getBaseContext().getResources().updateConfiguration(config, 
    // getBaseContext().getResources().getDisplayMetrics()); 
    this.setContentView(R.layout.main); 


    Log.w("isFirstTime onCreate","????"); 

    // Resources res = getBaseContext().getResources(); 
    // // Change locale settings in the app. 
    // DisplayMetrics dm = res.getDisplayMetrics(); 
    // android.content.res.Configuration conf = res.getConfiguration(); 
    // conf.locale = new Locale(languageToLoad.toLowerCase()); 
    // res.updateConfiguration(conf, dm); 

    // range spinner 
    rangeSpinner = (Spinner) findViewById(R.id.spinnerLanguage); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources() 
        .getStringArray(R.array.rangeArray)); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    rangeSpinner.setAdapter(adapter); 
    rangeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> adapterView, View view, 
       int position, long id) { 

      posit=position; 

      Log.w("isFirstTime onCreate onItemSelected","????"); 

      if (isFirstTime) { 
       isFirstTime = false; 
      } else { 

       if (position == 0) { 
        languageToLoad = "en"; 
       } else if (position == 1) { 
        languageToLoad = "fr"; 
       } else if (position == 2) { 
        languageToLoad = "ja"; 
       } 
       Locale locale = new Locale(languageToLoad); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       onConfigurationChanged(config); 

      } 
     } 

     public void onNothingSelected(AdapterView<?> adapterView) { 
     } 
    }); 

} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    getBaseContext().getResources().updateConfiguration(newConfig, 
      getBaseContext().getResources().getDisplayMetrics()); 

    setContentView(R.layout.main); 

    rangeSpinner = (Spinner) findViewById(R.id.spinnerLanguage); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources() 
        .getStringArray(R.array.rangeArray)); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    rangeSpinner.setSelection(posit); 
    rangeSpinner.setAdapter(adapter); 


    Log.w("isFirstTime onConfigurationChanged","????"); 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    Log.w("isFirstTime onResume","????"); 

} 
} 

답변

0

레이아웃의 루트 요소에 ID를 지정하십시오. 이제 콘텐츠를 두 번째로 확장하기 전에 전체보기를 제거하려고합니다.

그것은 단지 추측이지만 가치가 있습니다.

0

것은 ... 대신 onConfigChange() 방법을 호출하는 ... 그냥 시도에 대한 updateConfiguration 방법을

DisplayMetrics dm = getResources().getDisplayMetrics(); 
updateConfiguration(config, dm); 
1

를 사용해보십시오 수 있도록 한 사용자 기능 toChangeConfig(Config c) 말을 정의하고로 그 함수의 코드와 동일한 단계를 수행 onConfigChange()에 쓴 후 onItemSelected에이 함수를 호출합니다.

0

문자열을 외부화하고 이름 지정 방법을 사용하여 Android에서 처리하도록합니다.

또한 MKJParekh가 말한 것을 수행해야합니다. onConfigChange()는 사용자가 호출하는 것이 아니라 콜백입니다. 구성을 전환 할 때 호출되므로

Log.d("MY APP", "::onConfigurationChange() fired!"); 

이 표시 될 때까지 기다리십시오. 또한 해당 코드는 onCreate()가 아니라 onResume에 있어야합니다. onCreate()는 간단한 메서드 여야합니다.

관련 문제