簡體   English   中英

無法以編程方式更改布局

[英]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

哇,您的代碼確實很糟糕,您做錯了所有( 底部的簡短回答 ,但您可能必須閱讀以下內容):

  1. 您正在UI線程上運行while(true) {...}循環,這意味着您正在阻塞UI線程,僅此一個原因可能就是事情對您不起作用的原因(例如,更改布局)。 (請注意,按鈕onClick偵聽器將由UI線程調用)。
  2. 同樣,您正在使用wait()調用,這也會阻塞UI線程。 請不要這樣做!
  3. 使用synhronized(this)意味着您正在同步整個this對象,在您的情況下,this是活動。 我沒有理由這么做,僅當您的應用創建了同一活動的多個實例時,我才認為這不是您的情況。
  4. 我看到這樣添加ImageView很可能是錯誤的: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM