1

私は自分のプロジェクトでslidingmenuを使用しています。すべてのサイドメニュー項目はフラグメントです。
私のホームフラグメントには、フラグメントでもある2つのタブがあります。 (フラグメントAは、タブとして2つの子フラグメント、フラグメントBおよびCを有する)。私が他の断片から家の断片に戻ったときは、フラグメントAのOnResume()が呼ばれています。 FragmentAの子であるFragmentBのonResume()に電話する方法は?Android OnResume on childrenフラグメントが呼び出されていない

homefragmentがロードされるたびにFragmentBのビューを更新したいと思う唯一の選択肢は、OnResume()です。

私はonResume()のhomefragment(すなわちfragmentsA)でrefreshFragment()メソッドを呼び出そうとしましたが、フラグメントがアクティビティにアタッチされていないというエラーが表示されています。

FragemntA以下

@Override 
    public void onResume() { 
     super.onResume(); 
     mTabHost.setCurrentTab(mTabHost.getCurrentTab()); 

     boolean settingschanged = sharedPrefrences.getBoolean(Constants.CHECK_CHANGE, false); 
     int unit = sharedPrefrences.getInt(Constants.DIMENSION_UNIT, 0); 
     SharedPreferences.Editor editor = sharedPrefrences.edit(); 
     switch (mTabHost.getCurrentTab()) { 
     case 0: 
      ((Outer) mFragments.get(0)).refreshView(unit); 
      ((Outer) mFragments.get(0)).refreshFragment(settingschanged); 

      editor.putInt(Constants.DIMENSION_UNIT, unit); 
      editor.commit(); 
      break; 
     case 1: 
      ((Inner) mFragments.get(1)).refreshView(unit); 
      editor.putInt(Constants.DIMENSION_UNIT, unit); 
      editor.commit(); 
      break; 
     default: 
      ((Outer) mFragments.get(0)).refreshView(unit); 
      editor.putInt(Constants.DIMENSION_UNIT, unit); 
      editor.commit(); 
     } 


    } 

のonResumeのコードは、()クラッシュを取得していている:あなたは、このメソッドを使用することができます

09-16 14:13:34.608: E/AndroidRuntime(5758): java.lang.IllegalStateException: Fragment Outer{d34ce61} not attached to Activity 
09-16 14:13:34.608: E/AndroidRuntime(5758):  at android.support.v4.app.Fragment.getResources(Fragment.java:639) 
+0

を呼び出すことができますonPageSelected(で

は)**あなたは、私が)(** onResumeで – siddhesh

+0

@siddheshをリフレッシュするために、他の多くの方法があるonResumeでそれを更新していけませんどの子フラグメントが現在実行中であるかを確認し、フラグメントAのオブジェクトを使用して子フラグメントの必要な機能を呼び出すことを知ってください。 – hari86

+0

を使用することができ、他のどのような方法を詳しく説明することができ –

答えて

0

をし、それは私に何度も役立ちます。基本的にそれはあなたの要求に依存します

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
} 
+0

問題を表示したいのですが。つまり、フラグメントAを子フラグメントフラグメントBのonResume()と呼ぶ必要があります。 – hari86

0

私はこれを行う唯一の最良の方法ではないと確信しています。しかし、これは私のように問題を解決するはずです。

FragmentCanaliとFragmentPreferiti Fragmentの両方でrefresh()メソッドを記述してください。

public class ListCanali extends Fragment implements OnPageChangeListener{ 
private MyAdapter mAdapter; 

@Override 
public View OnCreateView (...) { 
... 
if(mAdapter == null) { 
mAdapter = new MyAdapter(getChildFragmentManager()); 
} 
viewPager.setAdapter(mAdapter); 
viewPager.setOnPageChangeListener(this); 
... 
} 

... 
@Override 
public void OnPageSelected (int position) { 
switch (position){ 
     case 0 : ((FragmentCanali)adapter.getItem(position)).refresh(); 
     case 1 : ((FragmentPreferiti)adapter.getItem(position)).refresh(); 
    } 
}} 

抽象的なrefresh()メソッドを持つ基本フラグメントから両方のフラグメントを拡張すると、よりクリーンになります。あなただけ((BaseFragment)adapter.getItem(position)).refresh()

関連する問題