Android I';m无法在另一个实现ActionTab Listener的片段中调用片段

Android I';m无法在另一个实现ActionTab Listener的片段中调用片段,android,android-fragments,android-actionbar,android-viewpager,Android,Android Fragments,Android Actionbar,Android Viewpager,我试图创建一个片段,在内容部分中有一个ListView作为默认视图。此视图中有操作栏选项卡。到目前为止,我已经能够做到这一点 LaunchListFragment代码 public class LaunchListFragment extends ListFragment implements ActionBar.TabListener { public static String LIST_TYPE = "invalid"; GenericListData g_data[] = null;

我试图创建一个片段,在内容部分中有一个ListView作为默认视图。此视图中有操作栏选项卡。到目前为止,我已经能够做到这一点

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,使用FragmentPagerDatapter生成视图

@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之间存在某种冲突

除了使用嵌套片段之外,还有其他方法来实现这一点吗


非常感谢您的帮助。

我建议您使用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;
}
FragmentPagerAdapter fragmentStagePageAdapter=新的SearchStatePagerAdapter(getFragmentManager());
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
mView=充气机。充气(R.layout.Victories\u tabhost\u layout,container,false);
mViewPager=(com.edenpod.goinout.view.ViewPager)mView.findViewById(R.id.pager);
mviewPage.removeAllViews();
mViewPager.setAdapter(fragmentStagePageAdapter);
mViewPager.setOffscreenPageLimit(3);
----------------
---------------
--------------
}
已更改的公共void onTabChanged(选项卡,android.app.FragmentTransaction ft){
int pos=tab.getCurrentTab();
if(mViewPager!=null&&pos==0){
mViewPager.setCurrentItem(位置);
}else if(mviewpage!=null&&pos==1){
mViewPager.setCurrentItem(位置);
}else if(mviewpage!=null&&pos==2){
mViewPager.setCurrentItem(位置);
}
}
//示例PagerAdapter
公共类SearchStatePagerAdapter扩展了FragmentPagerAdapter{
私有数组列表MFFragmentsList;
公共搜索StatePageRadapter(FragmentManager fm){
超级(fm);
MFFragmentsList=新的ArrayList();
添加(新的VenueSearchFragment());
添加(newpeopleSearchFragment());
}
@凌驾
public int getCount(){
返回MFFragmentsList.size();
}
@凌驾
公共片段getItem(int位置){
片段=空;
开关(位置){
案例0:
fragment=MFFragmentsList.get(位置);
打破
案例1:
fragment=MFFragmentsList.get(位置);
打破
}
返回片段;
}

}

当您收到错误时,请输入您的错误?谢谢您的回答。虽然您的解决方案似乎是可行的,即在onTabSelect()上显示片段,但在我的情况下,这可能不是最好的方法。我有一个MainActivity,它有两个片段(用于tablet view),还有一个DetailActivity,它为Phone启动一个片段。我希望片段具有选项卡的原因是,寻呼机将位于片段内部。这样可以避免在MainActivity和DetailActivity中重复设置ActionBar选项卡。此编辑模式不允许我在段落中键入注释,因此此注释可能会令人困惑。