2011-10-10 69 views
3

我在寫一個擴展Fragment的類,我想在XML文件中使用它。對於我的類,我有一個構造函數,它接受一個參數,指定片段應如何佈局其UI。是否有可能在XML中傳遞構造函數參數?

我想在XML中使用我的類,但也想指定這個佈局參數,但是可以將它包含在XML中嗎?

+1

有一個類似的quiestion與一個體面的答案:http://stackoverflow.com/questions/8641575/custom-attributes-in-android-fragments –

回答

5

碎片需要有無參數的構造函數。這是因爲可以多次創建片段實例。引述docs

每一個片段必須有一個空的構造,所以可以 恢復其活性的狀態時,實例化。強烈建議 建議子類沒有其他具有 參數的構造函數,因爲當 片段被重新實例化時,將不會調用這些構造函數;相反,參數可以由 調用者提供的setArguments(Bundle)提供,然後由片段 用getArguments()檢索。

不幸的是,你不能使用在XML建議setArguments,但有可能做到這一點不同,這取決於您計劃傳遞給你的片段是什麼的爭論可能集合。你可以,例如,繼承適當的片段:

public class MyPortraitFragment extends MyFragment { 
    public MyPortraitFragment() { 
     Bundle args = MyFragment.getPortraitArgsBundle(); 
     setArguments(args); 
    } 
} 

public class MyLandscapeFragment extends MyFragment { 
    public MyLandscapeFragment() { 
     Bundle args = MyFragment.getLandscapeArgsBundle(); 
     setArguments(args); 
    } 
} 

你會那麼在你的XML使用MyLandscapeFragmentMyPortraitFragment,這取決於你想使用的片段是哪個變種。

+0

謝謝Xion。除此之外的碎片,我認爲無法將參數傳遞給XML中的任何類的構造函數? – Kerry

+1

使用'AttributeSet'的'View'的子類是可能的。查看自定義視圖的示例:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html – Xion

+0

好的,謝謝Xion – Kerry

相關問題