2013-01-02 50 views
6

我有2個活動:A,B.放棄活動A,有一個視圖組,用戶更改其內容。在活動B中,我必須再次顯示該視圖組,但不作任何更改,它必須是該視圖組的真實副本,所以文本,顏色,尺寸,(孩子的)和...的順序必須相同。因此我不能使用Layout Inflater。是否有可能不創建該視圖組的子類型並更改屬性?因爲如果我有超過2個具有不同視圖組的活動,很難在上一個活動中顯示每個活動的視圖組。創建視圖的副本?

另外我無法從父母中刪除這些視圖組。

+1

http://stackoverflow.com/questions/4159211/how-do-i-clone-a-view – 2013-01-21 07:44:37

回答

1

創建一個保存視圖組配置的類。讓這個配置類保存與您的ViewGroup相關的所有信息。它將保存文本,維度順序和所有用戶已更改的顏色。將此類的對象從活動A傳遞給活動B,並使用此對象,通過膨脹相同的佈局來重現相同的視圖。

希望有所幫助。

並回答你的問題,沒有其他簡單的方法來做到這一點。

+0

有沒有什麼辦法從它的實例中獲取視圖的所有配置?例如是否有任何類可以容納視圖的配置? –

+0

不需要。您必須創建您自己的類並聲明您認爲重現視圖很重要的變量。 – Enigma

4

沒有簡單的方法來做到這一點。你不能在活動之間移動視圖。所以,你有幾種選擇:

  • 創建ViewGroup中的位圖,並在新的活動顯示(不工作是你需要編輯的副本)
  • 保存在原有的業務視圖的hierarchi狀態,並在新的重新創建(使用片段更容易)。
  • 不會創建新的活動。只需更改舊版中未觸及目標ViewGroup的某些UI部件即可。
5

如果他們的內容相同,則進行兩項不同的活動是沒有意義的。您可以動態更改一項活動的內容,行爲與兩項活動相同。如果真的有必要,那麼你將不得不保存所有需要的信息來重新構建活動並將其傳遞給新創建的活動。看看this

1

對於需要共享的ViewGroup,將其重構爲名爲C的Fragment。然後爲活動A和B的部分減去此共享部分創建Fragments。然後在一個新的包含Activity中包含所有這些碎片(您將不再需要活動A和B)。

片段A和C將是新的活動A.片段B和C將是新的活動B.要從第一個狀態轉換到第二個,請執行FragmentTransaction添加片段B並刪除片段A.記住要添加這個事務到後退堆棧,所以後退按鈕會將你帶回第一個狀態。

1

只是普遍的疑問?爲什麼你想要進行兩個活動,爲什麼不使用兩個片段分配到相同的視圖使用底層的活動來存儲發生在片段(View)之一中的所有變化,以及當用戶傳遞到另一個視圖時,只需發送第二個片段的參數。因此,您正在向用戶模擬這是兩項活動,但實際上它只是由一項活動控制的兩個片段。