0

一個片段具有多個內部片段的多個選項卡

我想要一個選項卡布局,其中每個選項卡上的有兩個片段,上面一個顯示任務的進度,通過在3個選項卡中提供輸入來完成從開始到結束,以及將在輸入的進度片段下面的另一個主要片段。

這使得在每個標籤標題和細節,標題片段相同和詳細片段(每個標籤上的輸入片段不同)!

我想了兩天:(

我所有的方法解決 我想,它包含兩個的FrameLayout主片段加入到兩個標籤從ViewPager佈局,顯示出在這裏:

public static class ScreenSlidePagerAdapter extends 
     FragmentStatePagerAdapter { 

    public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
      3); 

    public ScreenSlidePagerAdapter(FragmentManager fm, 
      ArrayList<Fragment> tabs) { 
     super(fm); 
     ScreenSlidePagerAdapter.tabs_fragments = tabs; 

    } 

    @Override 
    public Fragment getItem(int arg0) { 
     return tabs_fragments.get(arg0); 
    } 

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

    @Override 
    public int getItemPosition(Object object) { 
     if (tabs_fragments.contains(object)) { 
      return POSITION_UNCHANGED; 
     } 
     return POSITION_NONE; 
    } 

    public static void setItem(Fragment fr, int position) { 
     if (position <= 2 && position >= 0) { 
      tabs_fragments.remove(position); 
      tabs_fragments.add(position, fr); 
     } else 
      Log.d("adding tab", "wrong tab position to add fragment at"); 
    } 
} 

在活動開始我這樣做,看到我得到的標籤位置,用於在主要片段中加載不同標籤位置的細節片段:

mPager = (ViewPager) findViewById(R.id.pager); 
    // fragments for pagers 
    ArrayList<Fragment> tabs = new ArrayList<Fragment>(); 
    tabs.add(new FrEventDetails()); 
    tabs.add(new FrEventDetails()); 
    tabs.add(new FrRuleSave()); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), tabs); 
    mPager.setAdapter(mPagerAdapter); 

    bar = getActionBar(); 
    bar.setTitle("Add Rule"); 
    bar.setSubtitle("select event for rule"); 
    bar.setDisplayShowTitleEnabled(true); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 
    bar.setDisplayHomeAsUpEnabled(true); 

    bar.addTab(bar.newTab().setText("Select Event") 
      .setTabListener(new TabListener(mPager))); 
    bar.addTab(bar.newTab().setText("Select Action") 
      .setTabListener(new TabListener(mPager))); 
    bar.addTab(bar.newTab().setText("Save Rule") 
      .setTabListener(new TabListener(mPager))); 

    if (savedInstanceState != null) { 
     bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); 
    } 
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      // When swiping between pages, select the 
      // corresponding tab. 
      if (bar.getSelectedNavigationIndex() != position) 
       bar.setSelectedNavigationItem(position); 
      tab = position; 
     } 

然後當這個片段附加到活動中時,我添加一個進度佈局(標題(對於一個幀佈局並基於選定的選項卡,爲詳細幀佈局(用於輸入)添加另一個片段)。 這裏顯示:

public class FrEventDetails extends Fragment { 
Context context; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = (Context) activity; 
    int tab = AddRule1.tab; 
    android.app.FragmentTransaction ft = activity.getFragmentManager() 
      .beginTransaction(); 
    ft.add(R.id.fr_rule_progress_container, new FrProgress()); 

    if (tab == 1) { 
     ft.replace(R.id.fr_event_input_container, new FrActionSelect(), 
       "cell1_1").commit(); 
    } else if (tab == 0) { 
     ft.replace(R.id.fr_event_action_container, new FrEventSelect(), 
       "cell1_2").commit(); 
    } 

} 

注*佈局這主要片段是簡單的包含兩個framelayouts。

結果:它顯示了第一個選項卡上精美啓動一個標題和細節,但第二個選項卡上,僅主要片段和, 當我滑動到第三片段和回來,第二個片段是美麗填充(1後第二個顯示),但第一個片段現在是空的。 我不明白該怎麼做。
請給一些解決方案,兩天

回答

0
  1. 這個含淚問題要顯示所有標籤在開始的同時,加大PagerOffSetLimit(2在這種情況下爲3個標籤)
  2. 對於片段的清爽狀態或在當前選項卡旁邊的選項卡中調用片段上的某些方法,請使用Pager.instantiateItem方法。
    1. 延遲一秒鐘是因爲你有xml中的animateLayoutChanges。