我想在我的应用程序(运行时)上更改区域设置。到目前为止它工作正常。唯一剩下的就是刷新当前的活动。
文档说更新语言环境配置应该重新启动正在运行的活动(与屏幕方向相同的行为),但它会在我的情况下重新启动它。 (我没有使用paginationConfig.previousText = 'PREVIOUS' | translate;
来阻止此行为。)
以下是关键部分:
我有我的活动:
paginationConfig.previousText = 'PREVIOUS' | $translateProvider;
我绑定点击的适配器(在getChildView函数内):
android:configChanges="locale"
我的I18N类中的setLang方法: 公共课I18N {
public class SettingsActivity extends Activity {
ExpandableListAdapter listAdapter;
//....
}
}
我试过这个。它有点工作,但我不喜欢这种手动刷新活动的想法。
主要问题是,尽管使用了标志public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//...
convertView = inflater.inflate(R.layout.list_item, null);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
I18N.setLang(context, "fr");
};
});
}
,但历史记录(使用移动设备的后退按钮)无法正常工作(每次单击列表以更改语言仍会创建历史记录):
public static void setLang(final Context context, String langCode)
{
if (langCode.equals(""))
return;
try {
final Locale newLocale;
final String[] languageRegion = langCode.split("\\-(r)?");
I18N.saveLocale(context, langCode);
newLocale = languageRegion.length > 1 ? new Locale(languageRegion[0], languageRegion[1]) : new Locale(languageRegion[0]) ;
current = newLocale;
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(languageRegion[0]);
res.updateConfiguration(conf, dm);
}
catch (Exception e) {
Log.e("exception", e.getMessage() + e.getClass());
}
}
我做错了什么?如何使updateConfiguration重新启动活动或使手动意图不创建历史记录?
答案 0 :(得分:1)
在更改区域设置以更改活动布局或重新填充片段
之后,您需要再次设置内容视图(),而不是重新启动活动。convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
I18N.setLang(context, "fr");
//setContentView(R.layout.act_layout); // for activity
convertView = inflater.inflate(R.layout.list_item, null)
};
});
修改强>
您的convertView将是最终的,因此您可以通过方法
刷新它protected View refresh()
{
//inflate
View convertView = inflater.inflate(R.layout.list_item, null);
//setup ui controls
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
I18N.setLang(context, "fr");
refresh();
};
});
return convertView ;
}
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
return refresh();
}
答案 1 :(得分:0)
我已将android:noHistory="true"
添加到AndroidManifest.xml中的设置活动
这样,我可以在更改语言后返回主屏幕。