0

このコードを使用してハングマン アプリケーションを作成していますが、最初に言語を選択した場合、3 つのボタン (nyttSpillKnapp、omSpilletKnapp、avsluttKnapp) を押しても何も起こりません。理由はわかりません。OptionMenu で言語を選択しなければ、ゲームをプレイできます。

public class HangmanActivity extends Activity implements OnClickListener {
private static final String TAG = "Hangman";
SharedPreferences spraak;
String valgtSpraak = "uk";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    settSpraak("uk");
    setContentView(R.layout.main);
    Button nyttSpillKnapp = (Button) this.findViewById(R.id.nyttSpill);
    nyttSpillKnapp.setOnClickListener(this);

    Button omSpilletKnapp = (Button) this.findViewById(R.id.omSpillet);
    omSpilletKnapp.setOnClickListener(this);
    Button avsluttKnapp = (Button) this.findViewById(R.id.avslutt);
    avsluttKnapp.setOnClickListener(this);
}
public void settSpraak(String spraak) {
    valgtSpraak = spraak;
    Locale locale = new Locale(valgtSpraak);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.main);
}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.nyttSpill:
        SavePreferences("", valgtSpraak);
        startActivity(new Intent(this, test.class));
        break;
    case R.id.omSpillet:
        //SavePreferences("", valgtSpraak);
        startActivity(new Intent(this, omSpillet.class));
        break;
    case R.id.avslutt:
        finish();
        break;
        default:
    }
}
public boolean onCreateOptionsMenu(Menu meny) {
    super.onCreateOptionsMenu(meny);
    meny.add(R.string.norsk);
    meny.add(R.string.engelsk);
    return true;
}
public boolean onOptionsItemSelected(MenuItem item){
    SavePreferences("", valgtSpraak);
    if (item.getTitle().equals(getResources().getString(R.string.norsk))){
        settSpraak("no");
    }
    if(item.getTitle().equals(getResources().getString(R.string.engelsk))){
        settSpraak("uk");
    }
    return true;
}
private void SavePreferences(String key, String value) {
    SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
    SharedPreferences.Editor prefsEditor;
    prefsEditor = myPrefs.edit();
    prefsEditor.putString(key, value);
    prefsEditor.commit();
}

}

4

1 に答える 1

0

Locale を設定しようとすると、 settSpraak(...) メソッドが黙って失敗していると思います。logcatを確認しましたか?

ロケール文字列が正しくないと思います。たとえば、UK は en_GB である必要があります。英国とノルウェーでそれぞれ以下を試してください...

Locale locale = new Locale("en", "GB");
Locale locale = new Locale("no", "NO");

言語と国では大文字と小文字が区別されることに注意してください。

于 2012-04-30T01:05:37.463 に答える