2014-01-22 71 views
-1

我想從下面的靜態方法調用LayoutInflater:安卓:LayoutInflater靜態方法

private static void inflateLayout_keluarga_pp(int counter2, String name) { 
      LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
rowView = inflater.inflate(R.layout.layoutkeluarga, null); 
.................. 
.................. 
} 

我這是怎麼調用方法inflateLayout_keluarga_pp

public static void onRetrieve(int position){ 
    List<ModelKeluargaPP> mk = helper.getSelectTable_Marital(); 
     for (int i=0; i<mk.size();i++){ 
     inflateLayout_keluarga_pp(i,mk.get(position).getAnggota_pp()); 


    } 
} 

,但我在getActivity()有過錯的,說:Cannot make a static reference to the non-static method getActivity() from the type Fragment我需要使此方法變爲靜態。如何解決它?我希望有人能幫助解決我的問題,謝謝。

+1

你要學會Java基礎,靜態的手段 - 不能用此對象或其任何領域或任何非靜態方法 – serge

回答

1

getActivity()屬於當前Fragment的實例;它不能成爲靜態上下文的一部分。

當您聲明方法static時,您說明此方法不屬於Class的每個特定實例;它本身屬於Class。由於無論您是否實例化Class的對象,都可以使用靜態方法,因此無法保證對象成員和方法(非靜態)可用。因此,你不能引用僅當對象在一個永遠可用的靜態方法中實例化時纔可用的「事物」。

就像傑姆斯說的那樣,如果您需要訪問Fragment,您需要始終在方法的範圍內使其可用。這可以通過將Fragment傳遞給靜態方法或通過在靜態方法內實例化來完成。

1

如果它必須是靜態的,則將要調用getActivity的Fragment的引用傳遞給該方法。

private static void inflateLayout_keluarga_pp(int counter2, String name, Fragment myFragment) { 
      LayoutInflater inflater = (LayoutInflater)myFragment.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+0

,但我打電話像這樣的方法: \t \t \t \t \t \t inflateLayout_keluarga_pp(計數器」家庭」); –

+0

我看不到你在哪裏調用它或放置這個代碼的位置,所以我不能告訴你需要通過哪個片段。如果你沒有,你可以通過一個活動或其他的上下文,如果你改變了我適當添加的參數類型。 – Jems

+0

我對我的問題做了一些更新 –