1

我在我的項目中使用slidingmenu,並且所有sidemenu項目都是碎片。
我的家庭片段有兩個標籤也是片段。 (片段A有兩個子片段作爲標籤;片段B和C)。每當我從其他片段回到homefragment時,fragmentA的OnResume()就會被調用。如何調用FragmentB的onResume()這是FragmentA的子項?Android OnResume上的子片段沒有調用

我想在homefragment加載時刷新FragmentB中的視圖,我認爲唯一的選擇是在OnResume()中執行。

我試着調用homefragment(即fragmentA)的onResume()中的refreshFragment()方法,但它拋出了一個錯誤,表示片段沒有附加到活動中。 FragemntA的)的onResume的

代碼(

@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(); 
     } 


    } 

下面是崩潰我越來越:

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

不刷新它的onResume還有很多其他的方法來刷新 – siddhesh

+0

@siddhesh你能否詳細說明什麼其他方法我可以**的onResume使用 – hari86

+0

()**的片段a,請檢查哪個子片段當前正在運行,並知道通過使用片段A中的對象調用子片段的必需函數。 –

回答

0

您可以使用此方法,它可以幫助我很多次。基本上這取決於您的要求

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

問題是我想讓它可見。即當我調用片段A時,應該調用子片段fragmentB的onResume()。 – hari86

0

我相信這不是唯一/最好的方式來做到這一點。但是,這應該解決問題,因爲它對我做了。

請在FragmentCanali和FragmentPreferiti Fragments中寫入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()方法的基本片段擴展兩個片段,它將會更乾淨。

在使用onPageSelected(),你只需撥打((BaseFragment)adapter.getItem(position)).refresh()