在片段中我尝试在静态方法中使用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);
}
答案 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中实现此接口。