gpt4 book ai didi

java - 无法在运行时(运行 Activity )更改配置(语言环境)

转载 作者:行者123 更新时间:2023-11-30 02:07:35 25 4
gpt4 key购买 nike

我想更改我的应用程序(运行时)的区域设置。目前为止一切正常。唯一剩下的就是刷新当前 Activity 。

文档说更新语言环境配置应该重新启动正在运行的 Activity (与屏幕方向相同的行为)但在我的情况下它确实会重新启动它。 (我没有使用 android:configChanges="locale" 来防止这种行为)。

这里是关键部分:

我有我的 Activity :

public class SettingsActivity extends Activity {

ExpandableListAdapter listAdapter;
//....
}

我绑定(bind)点击的适配器(在 getChildView 函数内):

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");

};
});
}

还有我的 I18N 类中的 setLang 方法:公共(public)课 I18N {

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());
}
}

这个我试过了。它有点工作,但我不喜欢这种手动刷新 Activity 的想法。主要问题是,尽管使用了标志 FLAG_ACTIVITY_NO_HISTORY,但历史记录(使用移动设备的后退按钮)无法正常工作(每次单击列表以更改语言仍会创建历史记录):

Intent refresh = new Intent(context, context.getClass());
refresh.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(refresh);

我做错了什么?我怎样才能使 updateConfiguration 重新启动 Activity 或使手动 Intent 不创建历史记录?

最佳答案

您不想重新启动 Activity,而是希望在更改语言环境以更改 Activity 布局或重新填充 fragment 后再次设置 ContentView()

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();
}

关于java - 无法在运行时(运行 Activity )更改配置(语言环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30459414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com