ViewPager没有重绘内容,保持/变为空白

90

我们在使用ViewPager时遇到了一个非常奇怪的问题。我们在每个ViewPager页面上嵌入列表,并在更新列表数据时同时触发列表适配器和视图页适配器的notifyDataSetChanged。

我们观察到有时,页面不会更新其视图树,即保持空白,甚至在翻页到该页面时有时会消失。在前后翻页几次后,内容会突然重新出现。似乎Android在这里漏掉了一个视图更新。我还注意到,在使用层次结构查看器进行调试时,选择一个视图将始终使其重新出现,显然是因为层次结构查看器强制选定的视图重绘自身。

但是,我无法通过编程使其正常工作;无效化列表视图,或者甚至整个ViewPager都没有效果。

这是使用compatibility-v4_r7库时出现的情况。我也尝试使用最新版本的库,因为它声称修复了许多与视图页相关的问题,但事情变得更糟了(例如,手势被破坏,有时它不再允许我浏览所有页面)。

还有人遇到这些问题吗?或者你有什么想法是什么原因造成了这个问题?

13个回答

-1

我遇到了类似的问题。我缓存视图,因为我只需要在ViewPager中使用3个视图。当我向前滑动时一切正常,但当我开始向后滑动时会出现错误,它说“我的视图已经有一个父级”。解决方案是手动删除不需要的项目。

@Override
    public Object instantiateItem(ViewGroup container, int position) {
        int localPos = position % SIZE;
        TouchImageView view;
        if (touchImageViews[localPos] != null) {
            view = touchImageViews[localPos];
        } else {
            view = new TouchImageView(container.getContext());
            view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            touchImageViews[localPos] = view;
        }
        view.setImageDrawable(mDataModel.getPhoto(position));
        Log.i(IRViewPagerAdpt.class.toString(), "Add view " + view.toString() + " at pos: " + position + " " + localPos);
        if (view.getParent() == null) {
        ((ViewPager) container).addView(view);
    }
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object view) {
        //      ((ViewPager) container).removeView((View) view);
        Log.i(IRViewPagerAdpt.class.toString(), "remove view " + view.toString() + " at pos: " + position);
    }

..................

private static final int SIZE = 3;
private TouchImageView[] touchImageViews = new TouchImageView[SIZE];

-1

对我来说,问题出现在应用程序进程被杀死后返回到活动。我正在使用修改自Android源代码的自定义视图页面适配器。视图页面直接嵌入在活动中。

在设置数据和调用notifyDataSetChanged()之后,调用viewPager.setCurrentItem(position, true);

(带有动画)似乎可以解决问题,但如果将参数设置为false,则无法解决问题,片段为空白。这是一个边缘情况,可能对某些人有帮助。


-1

针对Kotlin用户:

在您的片段中; 使用 childFragmentManager 替代 viewPagerAdapter


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接