ユーザーが で選択した言語を保存していますsetSingleChoiceItems alertDialog
。アプリの起動時にすべてが正しい言語で表示され、ユーザーが新しい言語を選択したいときに、listView を押してアラート ダイアログが表示され、すでに選択されている言語が表示されるようにしたいと思います。選択されている右のラジオボタン。しかし、データを読み込めないようです。onCreate で関数を呼び出していますがLoadPrefs();
、それではうまくいかないようです。だから私はここで何か間違ったことをしていると思いますか?
言語設定を保存していて、ユーザーがアクセスしたときではなく、アプリを開いたときに直接変更する必要があるため、開始アクティビティでデータをロードすることも可能ですか?SettingsActivity
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
LoadPrefs();
registerClickCallBack();
ListView listView = (ListView) findViewById(R.id.settingsList);
String[] values = new String[] { "Language", "Facebook login", "About" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
listView.setAdapter(adapter);
}
private void LoadPrefs(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String langValue = sp.getString("lang", "en");
}
private void savePrefs(String lang, String value){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putString(lang, value);
edit.commit();
}
private String lang(String lang){
String language = lang;
Locale local;
Configuration config;
local = new Locale(language);
Locale.setDefault(local);
config = new Configuration();
config.locale = local;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
savePrefs("lang", lang);
return lang;
}
private void registerClickCallBack() {
ListView list = (ListView) findViewById(R.id.settingsList);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked,
int position, long id) {
if (position == 0) {
String langEN = getResources().getString(R.string.langEN);
String langFR = getResources().getString(R.string.langFR);
String langNL = getResources().getString(R.string.langNL);
String langTitle = getResources().getString(R.string.langTitle);
final CharSequence[] items = {langEN, langFR, langNL};
AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this);
builder.setTitle(langTitle);
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0:
lang("en");
break;
case 1:
lang("fr");
break;
case 2:
lang("nl");
break;
}
dialog.dismiss();
}
});
final AlertDialog levelDialog = builder.create();
levelDialog.show();
}
}
});
}
}