Android 无法以编程方式更改布局
我正在制作一个有多个屏幕的应用程序 最初,我想在相对布局中使用图像视图并更改其背景源,但它不起作用 然后我创建了一个新的布局并设置了它的背景源。当我使用setContentView(R.layout.xx)时,它仍然不起作用 这只发生在我代码的某些部分。不是每个部分都有 无法找到解决方案 代码:Android 无法以编程方式更改布局,android,layout,Android,Layout,我正在制作一个有多个屏幕的应用程序 最初,我想在相对布局中使用图像视图并更改其背景源,但它不起作用 然后我创建了一个新的布局并设置了它的背景源。当我使用setContentView(R.layout.xx)时,它仍然不起作用 这只发生在我代码的某些部分。不是每个部分都有 无法找到解决方案 代码: buttonForm.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0
buttonForm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("Socket","Entered User Details " );
Log.d("Socket","Name : " + editName.getText());
Log.d("Socket","Number : " + editNumber.getText());
Log.d("Socket","Email : " + editEmail.getText());
myClient.msg = "one";
msg = "one";
// setContentView(R.layout.basic);
while(true) {
Log.d("Socket","Waiting for ok " );
try {
synchronized(this){
wait(1000);
}
}
catch(InterruptedException ex){
}
if ((myClient.mainresponse.contains("ok"))) {
myClient.msg = "ready";
Log.d("Socket","Received OK");
// setContentView(R.layout.tablet3); -> here tablet 3 is a xml layout
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.tablet2); // -> here tablet 2 is a image in drawable
// getWindow().getDecorView().findViewById(android.R.id.).invalidate();
break;
}
}
countryPicker();
}
});
试试这个。
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setImageResource(R.drawable.tablet2);
setImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_all_out_black_24dp))
您需要设置ImageDrawable,而不是ImageResource哇,您的代码真的很糟糕,您做的都是错的(底部的简短回答,但您可能必须阅读以下内容):
while(true){…}
循环,这意味着您正在阻止UI线程,这可能就是事情不适合您的原因(例如更改布局)。(注意,按钮onClick监听器将由UI线程调用)wait()
call,这也会阻塞UI线程。请不要那样做李>
layout.setBackgroundResource(yourImageView)
,您需要使用layout.addView(yourImageView)将视图添加到布局中代码>(您可能需要设置图像视图布局参数以根据需要显示它)
setContentView(R.layout.tablet3)代码>应该有效!
我上面提到的所有其他不好的事情都会导致代码无法工作
正确的方法:
似乎您需要在后台线程或异步任务上运行工作,在那里,线程可以等待某些事情发生(myClient.mainresponse.contains(“ok”)
,在这种情况下,您可以随时调用UI线程上的工作,如下所示:
runOnUiThread(new Runnable() {
@Override
public void run() { /* Do UI work, like changing layout */ }
});
没有成功:(.我无法理解它为什么不改变不,不工作。当我单击按钮时,它在内部执行所有操作,不知怎的,它跳过了这一行。layout.setImageDrawable(getResources().getDrawable(R.drawable.tablet2));可能是myClient.Main响应不包含“ok”好的..在外部初始化您的imageview可能..通过单击此事件,我可以在日志中看到“Received OK”。这意味着它进入此检查。这是GitHub链接:。它在MainActivity中