2014-01-22 51 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

我对我的问题做了一些更新 –