我有一个奇怪的问题。当我运行应用程序并单击按钮(btn_eng或btn_pl)时,我看到登录logcat(“擦除对话框”或“擦除对话框PL”),但下次单击它时不显示,按钮不执行onClick操作。 我试着用按钮来改变语言。在我的应用程序中,我有一个数据表格资源(字符串数组)的对话框,当我更改语言时,我想要擦除对话框并使用足够的数据创建新的。
//public static Activity act; -> before onCreate(..)
this.act = this;
Button btn_eng = (Button) findViewById(R.id.btnEN);
btn_eng.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("XXX", "Erase dialog");
act.removeDialog(1);
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = act.getBaseContext().getResources().getConfiguration();
config.locale = locale;
act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
act.setContentView(R.layout.main);
}
});
Button btn_pl = (Button) findViewById(R.id.btnPL);
btn_pl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("XXX", "Erase dialog PL");
act.removeDialog(1);
Locale locale = new Locale("pl");
Locale.setDefault(locale);
Configuration config = act.getBaseContext().getResources().getConfiguration();
config.locale = locale;
act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
act.setContentView(R.layout.main);
}
});
答案 0 :(得分:3)
这是因为您正在重置onClick中的内容视图。调用setContentView
不会导致onCreate
运行 - 这就是(我猜)您将onClick
侦听器链接到按钮的位置。但是确实会导致显示整个新布局实例。您需要找到一种新方法来刷新屏幕,而不是用新数据替换屏幕。最好的方法是为您的活动抓取包裹ViewGroup
并致电View#invalidate();
答案 1 :(得分:0)
setContentView(R.layout.main);
不允许多次调用,如果要更改屏幕内容,则应在Layout / .xml文件中包含 Layouts / Views / ViewGroups 并更新它们而不是再次调用setContentView。
答案 2 :(得分:0)
尝试删除每个Onclicklistener中的setcontentView()调用并尝试将下面的代码和测试
Button btn_eng = (Button) findViewById(R.id.btnEN);
btn_eng.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("XXX", "Erase dialog");
act.removeDialog(1);
if(v.getId()==R.id.btnEN){
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = act.getBaseContext().getResources().getConfiguration();
config.locale = locale;
act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
});
Button btn_pl = (Button) findViewById(R.id.btnPL);
btn_pl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("XXX", "Erase dialog PL");
act.removeDialog(1);
if(v.getId()==R.id.btnPL){
Locale locale = new Locale("pl");
Locale.setDefault(locale);
Configuration config = act.getBaseContext().getResources().getConfiguration();
config.locale = locale;
act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
});
请分享结果并接受此结果,如果它在您的最后工作正常,那么