为什么不能在片段中使用ViewPager?它实际上是

Eug*_*ene 37 android android-fragments commonsware android-viewpager

有信息,这是不可能使用ViewPagerFragment像"许多来源的忙打码机指南Android开发 "由马克·墨菲,或职位像这样的SO.我很困惑,因为我没有这样的问题而且我成功地使用了ViewPager我的内容Fragment.唯一的区别是我实例化了一个ViewPagernot in onCreateView()方法而不是in onActivityCreated().一切都很好.

所以问题是 - 可能是我只是不知道某些事情,并且出于某些原因不推荐这样做以进行UI实例化onActivityCreated()?但又一次 - 一切正常.

这是类和xml的列表:

类:

public class ViewPagerFragment extends Fragment {

    static final int NUM_ITEMS = 2;

    private ViewPagerAdapter mAdapter;
    private ViewPager mPager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.view_pager_fragment, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mAdapter = new ViewPagerAdapter(getFragmentManager());

        mPager = (ViewPager) getView().findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);
    }

    public static class ViewPagerAdapter extends FragmentPagerAdapter {
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int num) {
            if (num == 0) {
                return new ItemsListFragment();
            } else {
                return new FavsListFragment();
            }
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

小智 70

要在片段中实现View寻呼机,请使用getChildFragmentManager()而不是getFragmentManager().您可以从onCreateView()onActivityCreated()调用ViewPager的setAdapter (),这不是问题.

我希望这能帮到你们.

  • `getChildFragmentManager()`@ Raj,你救了我的一天,谢谢! (6认同)

Com*_*are 62

更新:由于这个答案最初编写,你现在可以有嵌套的片段,这意味着可以有一个ViewPager页面的使用片段,在片段本身.该示例项目演示了该技术.

我现在回复你定期安排的答案,完整呈现......


从书中引用自己的话:

使用ViewPager的最简单方法是根据用户滑动将页面片段放入和放出屏幕.这仅在ViewPager本身未包含在片段中时才有效,因为您不能将片段嵌套在其他片段中.

引用Dianne Hackborn:

目前不支持嵌套片段.试图将片段放在另一个片段的UI中将导致未定义且可能破坏的行为.

这是完全可能把一个ViewPager内部的Fragment,只要内容的的ViewPager 本身不包含片段.由于PagerAdapterAndroid支持包提供的具体实现使用片段,因此您必须滚动自己的无片段PagerAdapter以将ViewPager片段放入片段中.

我将努力在本书的下一版中更清楚地说明这一点(除非你是英国人,在这种情况下,我会努力使这一点更清楚:-).

  • @amirlazarovich但是viewpager仍然是一个婊子:( (11认同)
  • 好消息,4.2中支持嵌套碎片.请参阅[Android 4.2 API](http://developer.android.com/about/versions/android-4.2.html#NestedFragments) (3认同)