簡體   English   中英

視圖SetVisibility不與PagerAdapter一起使用

[英]View SetVisibility not working with PagerAdapter

編輯:經過更多調查,結果發現這與ViewPager 問題在於在XML的ViewGroup上設置可見性屬性,然后嘗試在運行時進行更改。 我將保留原來的問題。 有關更多信息,請參見下面的答案。

我有一個帶有ViewPager和自定義PagerIndicator類的布局。 ViewPager的第0頁上,我希望指示器為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) {
        }
    });
}

mPagerIndicator在XML布局中設置為android:visibility="invisible" 當我在頁面之間滾動時,可以看到正在調用該回調,並且頁面號正確。 但是,沒有出現尋呼機。

這就是奇怪的地方:我加載了SDK隨附的Android Hierarchy Viewer。 當它從模擬器POOF加載視圖層次結構時,指示符出現。 在物理設備上似乎也不是問題。 編輯:經過更多測試后,2.3似乎是一個問題,因為版本較高的設備上不會發生,但2.3.6手機上確實會發生。)

知道為什么會這樣嗎? 假設這只是仿真器的一個怪癖,是否合理?還是我應該擔心它在某些設備上無法使用? 有什么技巧可以顯示嗎? 層次結構查看器做什么,可能會迫使它刷新自身?

您“在物理設備上似乎不是問題”是什么意思? 您是說您看到指示器OK,還是在HierarchyViewer中可見指示器?

在您的代碼中,一切對我來說都不錯。 聽起來您的指示器只是被另一個視圖(也許是ViewPager)覆蓋了,但是它存在的很好,因此您可以在HierarchyViewer中看到它。

嘗試刪除上面的代碼以切換可見性,然后在xml中將View.VISIBLE設置為View.VISIBLE 如果仍然看不到,那就是您的問題。

似乎Android 2.3.3+中存在一個涉及ViewGroups可見性的問題。 在XML中將android:visibility=X設置為ViewGroup似乎可以設置所有子視圖的可見性。 但是,在運行時更改可見性時,不會將其應用於子視圖。 因此,從可見性goneinvisibile開始,將導致稍后設置可見性失敗。

解決方案是在我的自定義視圖中覆蓋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,如果最初設置為invisble不會使我指向正確的方向, 則不會顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM