1

编辑:经过更多调查,事实证明这与ViewPager. 问题在于ViewGroup在 XML 中设置可见性属性,然后尝试在运行时更改它。我将保留原来的问题。有关更多信息,请参阅下面的答案。

我有一个带有ViewPager一个自定义PagerIndicator类的布局。在 的第 0 页上ViewPager,我希望指标是View.GONE。在其他页面上,我希望它是View.VISIBLE. 这是我的代码,在 期间调用onCreate

void setupPager() {
    mPager.setAdapter(new TutorialPagerAdapter());
    mPager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int currentPage) {
            Log.d(TAG, String.valueOf(currentPage));
            if (currentPage == 0) {
                mPagerIndicator.setVisibility(View.GONE);
            } else {
                mPagerIndicator.setVisibility(View.VISIBLE);
            }
            mPagerIndicator.setCurrentPage(currentPage);

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

mPagerIndicatorandroid:visibility="invisible"在 XML 布局中设置的。当我在页面之间滚动时,我可以看到正在调用回调,并且页码是正确的。但是,寻呼机没有出现。

这就是它变得奇怪的地方:我加载了 SDK 附带的 Android Hierarchy Viewer。当它从模拟器加载视图层次结构时,POOF,指示器出现了。在物理设备上似乎也不是问题。(编辑:经过更多测试,这似乎是 2.3 的问题,因为它不会发生在更高版本的设备上,但会发生在 2.3.6 手机上。)

知道为什么会这样吗?假设这只是模拟器的一个怪癖是否合理,还是我应该担心它在某些设备上不起作用?有什么技巧可以让它显示出来吗?层次结构查看器做了什么可能会迫使它自行刷新?

4

2 回答 2

0

“在物理设备上似乎不是问题”是什么意思?您的意思是您看到指示器正常,还是指示器在 HierarchyViewer 中可见?

在您的代码中,对我来说一切都很好。听起来你的指标只是被另一个视图覆盖了——也许是 ViewPager——但它存在得很好,因此你可以在 HierarchyViewer 中看到它。

尝试删除上面的代码以切换可见性,然后将 PagerIndicator 设置View.VISIBLE为 xml。如果还是看不到,那就是你的问题了。

于 2013-08-02T19:22:48.687 回答
0

Android 2.3.3+ 中似乎存在一个问题,涉及ViewGroups. 在 XML 中设置ViewGroupwithandroid:visibility=X似乎设置了所有子视图的可见性。但是,在运行时更改可见性时,它不会将其应用于子视图。因此,从gone或的可见性开始invisibile将导致稍后设置可见性失败。

解决方案是在我的自定义视图中覆盖setVisibility,使其也设置其所有子视图的可见性:

@Override
public void setVisibility(int visibility) {
    super.setVisibility(visibility);
    for (ImageView image : mImages) {
        image.setVisibility(visibility);
    }
}

感谢http://www.kittehface.com/2011/03/view-visibility-bug-on-android-233.htmlandroid setVisibility 不显示如果最初设置为不可见让我指向正确的方向。

于 2013-08-07T16:09:31.403 回答