2012-07-17 87 views
1

我有佈局文件,我在屏幕上動態膨脹。 然後在我的活動中,我必須啓動一些UI邏輯(監聽器等)。Android:如何在對象中封裝layout.xml

但是現在這個邏輯需要轉移到某個類。而且我無法決定以什麼方式創建基於視圖的對象,並且它的佈局採用xml。

​​

OR

MyViewFactory { 
    View get(Inflater inflater) { 

    } 

還是其他什麼東西?

可能有人也可以推薦源代碼在哪裏尋找。

+0

所以,如果你膨脹你的佈局,你爲什麼不在你的活動中這樣做?如果您需要的信息在您的活動中,請在此處動態構建佈局,並在其中設置您的UI邏輯。活動類已經有了幾個有用的方法來完成這個工作。看看[活動文檔](http://developer.android.com/reference/android/app/Activity.html)。 – skUDA 2012-07-17 14:42:21

+0

你能說出這些方法嗎? – 2012-07-17 14:59:47

+0

第一個問題:這個佈局究竟是什麼?它是整個活動的總體佈局,還是您想在某種類型的用戶交互之後導航到的子佈局? – skUDA 2012-07-17 15:52:16

回答

3

你可能不想用像ImageView這樣的簡單視圖來做到這一點。你希望它是一個更復雜的佈局,如(包含按鈕等的線性佈局)?

如果您需要第一個參數,您最好使用簡單的視圖實例,如ImageView img = new ImageView(context);或工廠,如果您有更多的參數參與,如果您認爲它更簡單,請將其設置爲xml。

至於更復雜的佈局走我更喜歡使用延長一些viewGroups的自定義類(像:MyView extends LinearLayout

創建一個名爲init();

呼叫從每個構造函數功能

它裏面的東西就像這樣:

LayoutInflater.from(context).inflate(R.layout.my_layout,this,true); 

+ 真正將意味着佈局將被附加到根,在這種情況下的LinearLayout,你可以用findViewById直接在一個ViewGroup)

ImageView img = findViewById(R.id.myView); 

我覺得很重要的是要創建自定義視圖,因爲它們總是包含特定於它們的邏輯並且可以重用,並且還公開一些公共方法以從包含自定義視圖的活動中調用。

+0

這將是一個複雜的佈局,帶有按鈕和其他控件。 – 2012-07-17 14:54:33

+0

那麼我的解決方案就是你需要的:)。它將以高級視圖顯示,並且您可以將其拖放到佈局中。 – DArkO 2012-07-17 16:08:48

+0

謝謝!但是我在膨脹方法中遇到'this'參數有問題。我想用我的對象作爲不根,例如調用addView(new MyCustomView()) 所以據我所知,我必須傳入構造函數根視圖,並將此視圖傳遞到方法而不是此。我對麼 ? – 2012-07-18 09:53:57