第一次未显示Viewpager片段

伊万·马克·德波诺(Ivan-Mark Debono)

我的活动有3个片段(A,B,C)。片段A由ViewPager2组成ListFragments用户可以点击任意一个列表片段中的一个项目,然后转到片段B。

在片段AI中:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    pagerAdapter = new PagerAdapter(getActivity().getSupportFragmentManager());
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmentA, container, false);

    vpPager = (ViewPager)view.findViewById(R.id.vpPager);
    vpPager.setOffscreenPageLimit(2);
    vpPager.setAdapter(pagerAdapter);
    vpPager.addOnPageChangeListener(this);

    return view;
}

并且PagerAdapter如下:

private class PagerAdapter extends FragmentPagerAdapter {
    private final ListFragment1 lf1 = ListFragment1 .newInstance();
    private final ListFragment2 lf2 = ListFragment2 .newInstance();

    public PagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        switch (position) {
            case 0:  return lf1;
            case 1:  return lf2;
            default: return null;
        }
    }
}

第一次显示活动时,正确显示viewpager列表片段。

2个viewpager片段从db加载数据,而我只执行一次(创建片段时)。

用户可以点击一个项目,然后显示片段B。如果用户按Back,则会显示片段A。但是,列表片段未显示(它们的实例仍然存在)。

即使存在实例,也可能是视图已被破坏了吗?

这是怎么了 有没有更好的方法?

编辑

如果newInstance在寻呼机适配器中使用,则会显示IllegalStateException: not attached to activity这是因为我按如下方式启动了异步任务:

@Override
public void onPageSelected(int position) {
    Fragment fragment = pagerAdapter.getItem(position);
    if (fragment instanceof IPagedFragment) {
        ((IPagedFragment) fragment).onShown();
    }
}

并且onShown是:

@Override
public void onShown() {
    myTask= new MyTask();
    myTask.execute((Void)null);
}

我什么时候可以开始执行任务,以便可以100%确定该片段已附加到活动上,并且已经创建了视图(我需要从布局中获取listview等)。

所以
  1. 在PagerAdapter类上重写方法setPrimaryItem,当寻呼机发生更改时会调用该方法,我会给它一个机会。

我会创建类似:

 private class PagerAdapter extends FragmentPagerAdapter {
        private final ListFragment1 lf1 = ListFragment1 .newInstance();
        private final ListFragment2 lf2 = ListFragment2 .newInstance();

        public PagerAdapter(android.support.v4.app.FragmentManager fm) {
            super(fm);
        }

        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            switch (position) {
                case 0:  return lf1;
                case 1:  return lf2;
                default: return null;
            }
        }

        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public void setPrimaryItem(ViewGroup container, int position, Object object) {
            super.setPrimaryItem(container, position, object);
            if (position == 0)
                lf1.updateUI(); //Refresh what you need on this fragment
            else if (position == 1)
                lf2.updateUI();
        }

    }
  1. 你也想念getCount()
  2. 我不确定屏幕外是否有任何用处,但可能不是问题。 vpPager.setOffscreenPageLimit(2)
  3. 还有一件事,我也将删除vpPager.addOnPageChangeListener(this),这没有用,这可能会导致您遇到一些问题。无论您需要做什么,都可以通过覆盖分页来实现,而无需使用它,就可以“破坏”某些标准分页(因为未调用超级)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Activity第一次打开时如何显示ViewPager的具体页面(片段)?

来自分类Dev

第一次时未显示套件盖

来自分类Dev

第一次在ViewPager中加载时的黑色片段

来自分类Dev

Android片段动画第一次卡住

来自分类Dev

在第一次加载页面时未显示VisualElements

来自分类Dev

第一次单击时未显示日期选择器

来自分类Dev

第一次后未显示按钮上的Angular UI datepicker弹出窗口

来自分类Dev

第一次选择后未显示数组的制表符完成

来自分类Dev

Ruby on Rails会话变量在第一次渲染时未显示在前端

来自分类Dev

React Native:第一次加载时未显示背景图像

来自分类Dev

第一次倒计时后未显示 HTML 中的计时器

来自分类Dev

函数在第一次单击时未执行

来自分类Dev

StateHasChanged第一次未检测到更改

来自分类Dev

Javascript变量第一次未正确设置

来自分类Dev

UITableViewCell第一次未正确加载标签

来自分类Dev

查找未传入数组 PHP 的第一次

来自分类Dev

UITableViewCells第一次不显示

来自分类Dev

存储过程第一次显示错误

来自分类Dev

UITableView第一次滚动时不显示

来自分类Dev

存储过程第一次显示错误

来自分类Dev

子视图仅第一次显示

来自分类Dev

仅显示类的第一次出现

来自分类Dev

Bootstrap Datepicker 第一次显示错误的日历

来自分类Dev

片段在第一次选择时“覆盖”另一个片段

来自分类Dev

来自视频的HTML5 Canvas drawImage在第一次绘制时未显示

来自分类Dev

仅第一次下一页的ViewPager部分视图

来自分类Dev

片段内的按钮不是在滚动视图中第一次触发吗?

来自分类Dev

第一次接触被忽略?

来自分类Dev

第一次击球太快