我正在制作一个有多个屏幕的应用程序。
最初,我想在相对布局中使用图像视图并更改其背景源,但它不起作用。
然后我创建了一个新布局并设置了它的背景源。当我使用setContentView(R.layout.xx)时仍然没有用。
这只发生在我的代码的某些部分。不在每个部分。
无法找到解决方案。
代码:
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();
}
});
答案 0 :(得分:0)
试试这个。
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setImageResource(R.drawable.tablet2);
答案 1 :(得分:0)
imageView.setImageDrawable(getResources()getDrawable(R.drawable.ic_all_out_black_24dp));
您需要设置ImageDrawable而不是ImageResource
答案 2 :(得分:0)
哇,你的代码非常糟糕,你做错了(底部的简短回答,但你可能必须阅读以下内容):
while(true) {...}
循环,这意味着您正在阻止UI线程,这可能就是为什么事情不适合您(例如更改布局)的原因。 (请注意,按钮onClick侦听器将由UI Thread调用。)wait()
调用,这也将阻止UI线程。请不要那样做!layout.setBackgroundResource(yourImageView)
,您需要使用layout.addView(yourImageView);
向布局添加视图(您可能需要设置图像视图布局参数以将其显示为您要)。简答:
因此,动态调用setContentView(R.layout.tablet3);
应该有效!
这是我上面提到的所有其他不好的事情,导致你的代码无法正常工作!
正确方法:
似乎您需要在后台线程或AsyncTask上运行工作,线程可以等待某些事情发生(在您的情况下为myClient.mainresponse.contains("ok")
),当发生这种情况时,您始终可以在UI上调用工作线程,像这样:
runOnUiThread(new Runnable() {
@Override
public void run() { /* Do UI work, like changing layout */ }
});