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。