2016-06-17 16 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()にアクセスできます。クラス名はMainActivity.java

であれば、メソッド名場合 :あなたは元のための静的メソッド

をすることなく、特定のクラスのオブジェクトを作るの作成とメソッドを使用することができます

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

updateProductList() ちょうどメタを呼び出すために、このオブジェクトを使用すると

MainActivity a = new MainActivity(); 

ようMainActivityのオブジェクトを作成していますa.updateProductList();

0

のような他のクラス

でMainActivityのODは、あなたは、Javaの静的メソッドからgetFragmentManager()またはgetChildFragmentManager()を呼び出すことはできません。 更新にあなたの製品リスト "

public interface OnDoneLoading{ 

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

} 

はあなたの断片で、このインターフェイスを実装するとのインターフェイスまたはコールバックを使用することを検討してください。

関連する問題