【问题标题】:Android Viewpager inside of Viewpager not showing layoutViewpager内部的Android Viewpager不显示布局
【发布时间】:2015-09-23 18:44:04
【问题描述】:

我的任务是创建一个非常非正统的布局,只能通过另一个视图分页器的第二个窗格中的视图分页器来完成,谢天谢地,外部视图分页器需要被锁定,所以任务更现实一点,但是出乎意料的问题在加载内部视图分页器后出现 onCreateView 从未调用过,我可以看到它是左右滑动的,因此内部视图分页器已设置,但由于某些奇怪的原因它不会加载任何内部视图,任何帮助都会有很大帮助,谢谢

主要活动

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_fragment);

    pagePosition = 0;

    setupViews();

}

private void setupViews() {

    //setup images to be changed later

    ivCategory = (ImageView) findViewById(R.id.ivCatergory);
    ivHome = (ImageView) findViewById(R.id.ivHome);
    ivProfile = (ImageView) findViewById(R.id.ivProfile);

    //setup the viewpager
    pager = (CustomViewPager) findViewById(R.id.viewpager);

    //add fragments to the fragment array
    pageList.add(NavigationFragment.newInstance(0, getApplicationContext(), this));
    pageList.add(NavigationFragment.newInstance(1, getApplicationContext(), this));
    pageList.add(NavigationFragment.newInstance(0, getApplicationContext(), this));


    // initialize the page adapter
    pageAdapter = new FragmentHomeAdapter(getSupportFragmentManager(), pageList);

    //set the page adapter to the viewpager
    pager.setAdapter(pageAdapter);

    //set homepage to be first
    pager.setCurrentItem(1);


    //disable swiping to mimic iphone behaviour
    pager.setPagingEnabled(false);


}

浏览器

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    int pageType = getArguments().getInt(PAGE_TYPE);

    View v;


    if (pageType == 1) {//all inner fragments will happen here

        v = inflater.inflate(R.layout.fragment_container, container, false);

        //setup the inner viewpager
        pager = (CustomViewPager) v.findViewById(R.id.viewpager);

        pageList.add(HomeFragment.newInstance(0, context, getActivity()));
        pageList.add(HomeFragment.newInstance(1, context, getActivity()));

        // initialize the page adapter
        pageAdapter = new FragmentHomeAdapter(getActivity().getSupportFragmentManager(), pageList);

        //set the page adapter to the viewpager
        pager.setAdapter(pageAdapter);

        pager.setPagingEnabled(true);

    }


    return v;
}

内部浏览器

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v;

    v = inflater.inflate(R.layout.fragment_list_feed, container, false);

    lv = (ListView) v.findViewById(R.id.lvFeed);

    listAdapter = new ListHomeAdapter(getArguments().getInt(PAGE_TYPE), feedListItems, getActivity());

    //add header
    header = (ViewGroup) inflater.inflate(R.layout.list_item_header, lv, false);
    lv.addHeaderView(header, null, false);

    lv.setAdapter(listAdapter);

    if (getArguments().getInt(PAGE_TYPE) == 0) {

        new getFeedListItems().execute();

    } else {

        new getFeedListItems().execute();

    }

    Toast.makeText(context, "This never shows",
            Toast.LENGTH_SHORT).show();


    return v;
}

【问题讨论】:

    标签: java android android-layout android-viewpager


    【解决方案1】:

    在另一个 Fragment 中显示 Fragment 时,使用 getChildFragmentManager() 而不是 getSupportFragmentManager()

    以这种方式初始化您的 pageAdapter:

    pageAdapter = new FragmentHomeAdapter(getChildFragmentManager(), pageList);
    

    【讨论】:

    • 你真棒
    • 天啊。你拯救了我的一天。非常感谢
    • 哥们你太棒了!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多