2016-06-17 3 views
1

В фрагменте я пытаюсь использовать getChildFragmentManager() в статическом методе. Но он показывает ошибку и предлагает мне сделать метод не статическим.Нестационарный метод 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

Тогда почему вы делаете его статическим? –

+0

@ShreeKrishna Я хочу использовать его в другом классе – eluuu

+0

Вы можете вызвать метод из другого класса, если у вас есть экземпляр 'C_Fragment'. – Thilo

ответ

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); 
    } 
0

Вы можете использовать метод с созданием решений объекта определенного класса, без статического метода

Для бывших: Если имя класса MainActivity.java

Если имя метода это updateProductList() Просто сделайте объект MainActivity как

MainActivity a = new MainActivity(); 

Затем использовать этот объект для вызова мет ОД MainActivity в другом классе

Как a.updateProductList();

0

Вы не можете назвать getFragmentManager() или getChildFragmentManager() из статического метода в Java. Рассмотрите возможность использования интерфейса для или обратного вызова обновить ваш список продуктов "

public interface OnDoneLoading{ 

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

} 

реализовать этот интерфейс в вашем фрагменте.

Смежные вопросы