3

我想创建一个片段在内容部分有一个ListView作为默认视图。有这个视图的ActionBar选项卡。我能够创造这一点。我无法调用另一片段实现ActionTab监听器的onTabSelected内的片段

的LaunchListFragment代码

public class LaunchListFragment extends ListFragment implements ActionBar.TabListener { 
public static String LIST_TYPE = "invalid"; 
GenericListData g_data[] = null; 
    private ViewPager mViewPager; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View result = inflater.inflate(R.layout.fragment_launch_list, 
      container, false); 

    setActionTabs(); 
    setList(); 
    return (result); 
} 

public static LaunchListFragment newInstance(String type) { 
    LaunchListFragment frag = new LaunchListFragment(); 
    Bundle args = new Bundle(); 
    LIST_TYPE=type; 

    args.putString(LIST_TYPE, type); 
    frag.setArguments(args); 

    return (frag); 
} 

我想要的是什么,当你点击onTabSelected(),想改变看法,我使用PagerFragment与生成的视图使用FragmentPagerAdapter

@Override 
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 

     getChildFragmentManager().beginTransaction() 
     .add(android.R.id.content, 
      new PagerFragment()).commit(); 
} 

麻烦的是,我无法使用getChildFragmentManager或getFragmentManager来调用PagerFragment,我得到编译错误以将PagerFragment更改为app.Fragment。即使我改变了这一点,它仍然抱怨。

我怀疑support.Fragment和app.Fragment之间有某种冲突。

除了使用嵌套片段之外,还有其他方法可以达到这个效果吗?

任何帮助表示赞赏。

+0

输入你的错误,当你得到什么? –

回答

2

我会建议你使用viewPager,让你的两个片段显示在选项卡上(在操作栏上)。根据需要使用FragmentStatePagerAdapter或FragmentPagerAdapter,然后初始化viewPager并设置适配器。然后在'onTabSelected()'获取标签位置,然后显示相应的viewPager页面。

 FragmentPagerAdapter fragmentStagePageAdapter = new SearchStatePagerAdapter(getFragmentManager()); 


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    mView = inflater.inflate(R.layout.venues_tabhost_layout, container, false); 

    mViewPager = (com.edenpod.goinout.view.ViewPager) mView.findViewById(R.id.pager); 
    mViewPager.removeAllViews(); 
    mViewPager.setAdapter(fragmentStagePageAdapter); 
    mViewPager.setOffscreenPageLimit(3); 
    ---------------- 
    --------------- 
    -------------- 
    } 

    public void onTabChanged(Tab tab, android.app.FragmentTransaction ft) { 
    int pos = tab.getCurrentTab(); 
    if(mViewPager!= null && pos == 0) { 
     mViewPager.setCurrentItem(pos); 
    } else if(mViewPager != null && pos == 1) { 
     mViewPager.setCurrentItem(pos); 
    } else if(mViewPager != null && pos == 2) { 
     mViewPager.setCurrentItem(pos); 
    } 
    } 

// Example PagerAdapter 
public class SearchStatePagerAdapter extends FragmentPagerAdapter{ 

private ArrayList<Fragment> mFragmentsList; 

public SearchStatePagerAdapter(FragmentManager fm) { 
    super(fm); 
    mFragmentsList = new ArrayList<Fragment>(); 
    mFragmentsList.add(new VenueSearchFragment()); 
    mFragmentsList.add(new PeopleSearchFragment()); 
} 

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

@Override 
public Fragment getItem(int position) { 
    Fragment fragment = null; 
    switch (position) { 
     case 0: 
      fragment = mFragmentsList.get(position); 
      break; 
     case 1: 
      fragment = mFragmentsList.get(position); 
      break; 
    } 
    return fragment; 
} 

}

+0

谢谢你的回答。虽然你的解决方案似乎是一个可行的方法 - 例如在onTabSelect()上显示片段,但对我来说这可能不是最好的方法。我有一个MainActivity,它有两个片段(用于平板电脑视图)和一个为手机启动一个片段的DetailActivity。我希望片段具有制表符的原因,以便传呼机将在片段内。这将避免必须在MainActivity和DetailActivity中复制设置ActionBar选项卡。此编辑模式不允许我在段落中键入我的评论,因此此评论可能会令人困惑。 – Geoplex