2013-08-07 89 views
3

我有一個片段AroundMeFragment它有一個查看尋呼機有兩個片段MapFragmentListFragment。當我第一次進入這個片段時,一切正常,但是當我點擊一個項目進入一個新片段的詳細視圖並返回AroundMeFragment時,視圖是空白的,沒有任何項目被繪製。而且,如果我退出此片段並輸入另一個片段,則片段爲空。ViewPager在空白時,我回到片段

當我從細節片段返回AroundMeFragment時,如何看到片段的內容?

ArouundMeFragment:

public ArroundMeFragment() { 
} 

public static Fragment newInstance(Bundle bundle) { 
    ArroundMeFragment f = new ArroundMeFragment(); 
    f.setArguments(bundle); 
    return f; 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.activity = activity; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    sectionShowed = MAP_VIEW_ARROUND_ME; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.arround_me_main_layout, container, false); 

    mViewPager = (ViewPager) v.findViewById(R.id.viewPager); 

    if (fragments == null) { 
     fragments = new ArrayList<Fragment>(); 

     fragments.add(MapMainFragment.newInstance()); 

     Bundle bundle = new Bundle(); 
     bundle.putInt(ConstantsTypeSection.TYPE_VIEW_SECTION, ConstantsTypeSection.AROUND_ME_SECTION); 
     fragments.add(DetailShapelessListViewFragment.newInstance(bundle)); 
    } 

    mAdapter = new AroundMePagerAdapter(getFragmentManager(), fragments); 
    mViewPager.setAdapter(mAdapter); 



    // BTN CHANGE VIEW 
    btn_change_view = (ImageButton) v.findViewById(R.id.btn_change_view); 
    btn_change_view.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      changeView(); 
     } 
    }); 

    return v; 
} 

/** 
* Cambia una vista u otra 
*/ 
private void changeView() { 

    try { 

     if (sectionShowed == LIST_VIEW_ARROUND_ME) { 

      mViewPager.setCurrentItem(0); 

      sectionShowed = MAP_VIEW_ARROUND_ME; 

      btn_change_view.setImageResource(R.drawable.selector_btn_change_map_arroundme); 

     } else if (sectionShowed == MAP_VIEW_ARROUND_ME) { 

      mViewPager.setCurrentItem(1); 

      sectionShowed = LIST_VIEW_ARROUND_ME; 

      btn_change_view.setImageResource(R.drawable.selector_btn_change_list_arroundme); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}// End Method 

private class AroundMePagerAdapter extends FragmentPagerAdapter { 

    private ArrayList<Fragment> fragments; 

    public AroundMePagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 
} 

MainActivity。只有一個活動支持應用程序中的所有片段。

.... 
case ConstantsMenu.ARROUND_ME_SECTION: 
    Fragment = ArroundMeFragment.newInstance(bundle); 
    break; 
.... 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.content_frame, mFragment); 
if (hasToAddToBackStack) { 
     ft.addToBackStack(null); 
} 
ft.commit(); 

回答

3

嵌套片段在版本16和更低版本中不兼容。現在,你可以動態地nest fragment

我改變我的代碼,現在我沒有使用viewpager並添加像這樣的代碼片段切換到另一個片段。

getChildFragmentManager().beginTransaction().replace(R.id.container, list, "LIST").setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); 
+3

*嵌套片段不在版本16和更低的兼容* - 本地的。但是,您可以使用兼容性軟件包中基本相同的碎片。你的問題的代碼有一個問題,如果你打算使用嵌套片段,那麼使用'getChildFragmentManager()'而不是'getFragmentManager()'。 – Luksprog

+0

您可以通過使用我在此處提供的適配器在不使用getChildFragmentManager()的情況下實現此目的:http://stackoverflow.com/questions/7700226/display-fragment-viewpager-within-a-fragment/18234088#18234088 – Slickelito

1
mAdapter = new MyFragmentPagerAdapter(getChildFragmentManager()); 

而不是

mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); 

Austyn Mahoney