[英]Unable to change layout programmatically
我正在制作一個有多個屏幕的應用程序。
最初,我想到了在相對布局中使用圖像視圖並更改其背景源的功能,但是它不起作用。
然后,我創建了一個新的布局並設置了其背景源。 當我使用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();
}
});
嘗試這個。
ImageView layout = (ImageView) findViewById(R.id.background);
layout.setImageResource(R.drawable.tablet2);
imageView.setImageDrawable(getResources()getDrawable(R.drawable.ic_all_out_black_24dp));
您需要設置ImageDrawable而不是ImageResource
哇,您的代碼確實很糟糕,您做錯了所有( 底部的簡短回答 ,但您可能必須閱讀以下內容):
while(true) {...}
循環,這意味着您正在阻塞UI線程,僅此一個原因可能就是事情對您不起作用的原因(例如,更改布局)。 (請注意,按鈕onClick偵聽器將由UI線程調用)。 wait()
調用,這也會阻塞UI線程。 請不要這樣做! layout.setBackgroundResource(yourImageView)
,您需要使用layout.addView(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 */ }
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.