非静态方法getChildFragmentManager()不能从静态上下文引用

时间:2016-06-17 05:42:42

标签: android android-fragments

在片段中我尝试在静态方法中使用getChildFragmentManager()。但它显示错误并建议我使方法不是静态的。

Non static method getChildFragmentManager() cannot be referenced from a static context

片段:

public class C_Fragment extends android.support.v4.app.Fragment

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {



        return inflater.inflate(R.layout.fragment_a, container, false);
    }

 static void updateProductList(){
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (getChildFragmentManager().findFragmentByTag("kz.dreamwings.unimax.fragments.C_Category_A_prudacts")!=null) {
//                            C_Category_A_prudacts.adapter.notifyDataSetChanged();
                    Fragment frg = null;
                    frg = getChildFragmentManager().findFragmentByTag("kz.dreamwings.unimax.fragments.C_Category_A_prudacts");
                    final FragmentTransaction ft = getChildFragmentManager().beginTransaction();
                    ft.detach(frg);
                    ft.attach(frg);
                    ft.commit();
                }
            }
        }, 300);
    }

3 个答案:

答案 0 :(得分:2)

是的,您无法从静态上下文访问非静态上下文。您试图在静态方法中获取片段实例,您应该在静态方法之外进行,以便访问getChildFragmentManager()

private static Fragment fragment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    fragment = getChildFragmentManager().findFragmentByTag("kz.dreamwings.unimax.fragments.C_Category_A_prudacts");

    //.... other code
}

static void updateProductList(){
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (fragment!=null) {
                //.... other code
            }
            }
        }, 300);
    }

答案 1 :(得分:0)

您可以使用该方法创建特定类的对象,而无需创建静态方法

对于前: 如果类名是MainActivity.java

如果方法名称是updateProductList() 只需将MainActivity的对象设为

即可
MainActivity a = new MainActivity();

然后使用此对象在其他类

中调用MainActivity的方法

a.updateProductList();

答案 2 :(得分:0)

您无法从Java中的静态方法调用getFragmentManager()或getChildFragmentManager()。考虑使用接口或回调 更新您的“产品列表”

public interface OnDoneLoading{ 

   void updateProductsList();
   //or better use  void updateProductsList(ArrayList<Products> products);

}

在Fragment中实现此接口。