編集:さらに調査した結果、これはViewPager
. 問題は、XML で可視性属性を設定しViewGroup
、実行時に変更しようとすることです。元の質問はそのままにしておきます。詳細については、以下の私の回答を参照してください。
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) {
}
});
}
はXML レイアウトでmPagerIndicator
設定されます。android:visibility="invisible"
ページ間をスクロールすると、コールバックが呼び出され、ページ番号が正しいことがわかります。ただし、ポケットベルは表示されません。
ここが奇妙なところです。SDK に付属の Android Hierarchy Viewer をロードしました。エミュレーター POOF からビュー階層をロードすると、インジケーターが表示されました。また、物理デバイスでは問題ではないようです。(編集:いくつかのテストの後、2.3 の問題であると思われます。これは、より高いバージョンのデバイスでは発生しませんが、2.3.6 の電話では発生するためです。)
なぜこれが起こっているのですか?これはエミュレータの癖にすぎないと考えるのが妥当ですか、それとも一部のデバイスでは動作しないのではないかと心配する必要がありますか? それを表示させるためのハックはありますか?ヒエラルキー ビューアーは、それ自体を強制的に更新する可能性があることを何をしますか?