2014-11-06 45 views
2

我在這找不到任何東西......我想知道當我在活動中有片段時,爲什麼我不能調用getPackageName()和getContentResolver()等某些東西?Android中片段的行爲

+2

因爲這些方法不是來自片段... – Selvin 2014-11-06 02:08:45

回答

8

在附加到活動之後,從片段內部的非靜態函數進行調用。

getActivity().getPackageName(); 
    getActivity().getContentResolver(); 

正如您的評論者所述,這些不是片段函數,您必須獲取contextWrapper實例。

+0

這應該被標記爲答案。 – Harry 2014-11-06 02:53:40

1

因爲根據this documentation,您提到的方法是Context類的方法。 Activity是Context的一個子類,因此它有這些方法可用。片段,但是,不是。有兩種方法可以從片段中獲得這些方法:

第一個選項:片段被連接後(它的onAttach()方法已被調用),您可以使用getActivity()方法獲取活動它已被附加到。然後你可以使用getPackageName()和getContentResolver()。如:getActivity()。getPackageName()。爲了更加安全,你可能想要做的:

Activity myActivity = getActivity(); 
if (myActivity != null) 
{ 
    myActivity.getPackageName(); 
    myActivity.getContentResolver(); 
} 
else 
{ 
    //deal with the null problem 
} 

第二個選項:在onCreateView()方法,您的片段將尚未附着,所以你不能用上面的方法。您可以使用LayoutInflater來獲取視圖。然後在視圖上調用getContext()。如:

View myView = inflater.inflate(R.layout.my_fragment_layout, container, false); 
myView.getContext().getPackageName(); 
myView.getContext().getContentResolver();