2014-07-01 116 views
0

而不是在當前佈局中移動視圖,我想知道是否可以在程序運行時加載不同的佈局。在Java中運行時,是否可以將佈局切換到其他佈局?

例如在上創建我會用:

setContentView(R.layout.layout1); 

,然後在上點擊收聽我會用:

setContentView(R.layout.layout2); 

我這樣說,因爲我使用的是自定義的對話,阻止我產生一個覆蓋它的對話框。我嘗試過,但迄今爲止只收到錯誤。我真的很想知道這是否可能。

+0

這是但不是一個好主意,恕我直言,並可能變得混亂。你最好使用片段,切換活動或採取其他行動。如果你確切地告訴我們你想要完成什麼,以及爲什麼你以前的嘗試沒有奏效,那麼我們可能會提出一個更好的方法。 – codeMagic

+0

我正在使用自定義對話框來發送信息。但是,當出現錯誤時,我想顯示一條消息說錯誤。但是,自定義對話框不允許創建另一個對話框。此外,我認爲改變目前佈局周圍的視圖需要更多的時間比如果我改變了佈局周圍。 PS:由於它是我的應用程序的一部分,你認爲即使它效率低下,我也可以改變佈局。 – jamesgates1

+0

一個想法是,您可以使用其他活動與對話框主題,如果這可以爲​​你工作,而不是你有的對話框。這將允許您創建錯誤對話框。不確定的設計。是的,你一定可以改變佈局,但我不知道這是最好的方法。你的意思是改變你的對話或活動的佈局? – codeMagic

回答

0

這是可能的,但有風險,不建議用於最終產品。問題是,您切換視圖後無法訪問已定義的視圖。您需要再次將它們分配給新的佈局。因此,一旦切換內容視圖,請重新初始化所有視圖以及任何引用舊佈局的內容。調用舊佈局的視圖將導致崩潰或錯誤消息。

就像CodeMagic說的那樣,最好使用fragment和FragmentManager來做到這一點。實際上,這不是一個穩定的方法來生成良好的代碼。我建議使用單獨的片段並使用backstack等,以便您的遊戲不僅可以工作,而且可以輕鬆導航回原始片段,而不是使用幾乎不起作用的臨時代碼。

在調用了setContentView(R.id.yourLayout)之後,您需要重新實例化所有其他視圖。所以就像說你使用一個ImageView視圖來顯示顏色的變化,那麼你需要實例化該ImageView之後,你從,以便它從新的佈局拉,並沒有引用原始佈局。

例子:

ImageView imageView; 

public void onCreate(Bundle b){ 
    super.savedInstanceState(b); 
    setContentView(originalLayout); 
    //Instatiate all of your original Views. 
    imageView = (ImageView) R.id.yourImageView; 
} 


public void onButtonClick(View){ 
    setContentView(newLayout); 
    imageView = (ImageView) R.id.yourNewImageView; 
    //All other views 
} 

如果您需要的片段Manager解決方案的一個例子去這裏:https://developer.android.com/training/basics/fragments/creating.html ,並通過他們的一些例子看就怎麼properly做你正在嘗試做的。

+0

由於我不需要切換回用戶將不得不退出對話框,你能提供一個代碼示例嗎? – jamesgates1

相關問題