【问题标题】:I'm unable to call a Fragment within onTabSelected of another Fragment that implements ActionTab Listener我无法在实现 ActionTab 侦听器的另一个片段的 onTabSelected 中调用片段
【发布时间】:2013-04-17 03:43:08
【问题描述】:

我正在尝试创建一个在内容部分具有 ListView 的片段,作为默认视图。此视图有 ActionBar 选项卡。到目前为止,我能够创建它。

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

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

任何帮助表示赞赏。

【问题讨论】:

  • 输入你的错误,当你得到?

标签: android android-fragments android-actionbar android-viewpager


【解决方案1】:

我建议您使用 viewPager,让您的两个片段显示在选项卡选择上(在操作栏上)。根据需要使用 FragmentStatePagerAdapter 或 FragmentPagerAdapter,然后初始化 viewPager 并设置适配器。然后在 'onTabSelected()' 中获取 tab 位置然后显示对应的 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;
}

}

【讨论】:

  • 感谢您的回答。尽管您的解决方案似乎是一个可行的解决方案 - 即在 onTabSelect() 上显示片段,但这可能不是我的最佳方式。我有一个 MainActivity,它有两个片段(用于平板电脑视图)和一个为 Phone 启动单个片段的 DetailActivity。我希望片段有选项卡的原因,以便寻呼机将在片段内。这将避免在 MainActivity 和 DetailActivity 中重复设置 ActionBar 选项卡。此编辑模式不允许我在段落中输入我的评论,因此此评论可能会造成混淆。
猜你喜欢
  • 2017-07-25
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2015-01-28
相关资源
最近更新 更多