6

何が起こっているのか:最初の2つのViewPagerページが適切にロードされました(ViewPagerは現在のページから+ -1を自動的にロードします)。これらを超えてスクロールしても、次のページは表示されません。以下の問題のGIFデモ。

デバッグ情報:ページインスタンス化され(以下のコードを参照)、ViewPagerに正常に追加されますArrayList<ItemInfo>mItems(ログメッセージで確認されます)。( aospで)android.support.v4debug = trueを設定してライブラリを再コンパイルしましたが、以下を除いてすべてが完全に機能していることが示されています。mmm frameworks/support/v4/

ViewPagerのonLayoutメソッドとonMeasureメソッドは、最初の2つのビューがロードされた後に呼び出されなくなります。これは、他のページが本来のように測定および配置されていないため、黒であることを意味します。レイアウトツリーの更新を強制的に無効にするために、さまざまなポイントでさまざまなrequestLayout()呼び出しを追加してみました。

背景:inflater.inflateを介してインスタンス化され、view.findViewById(R.layouy.myid)を介して見つかったViewPagerがあります。これは古いギャラリービューを直接置き換えており、テストの目的で、PagerAdapter instanceiateItem(collection、position)は単にこれを行います。

@Override
public Object instantiateItem(View collection, final int position) {
    final TextView tv = new TextView(collection.getContext());
    tv.setText("Looking at page " + position);
    tv.setTextColor(Color.WHITE);
    tv.setBackgroundColor(Color.rgb( (int)(Math.random()*100), (int)(Math.random()*100), (int)(Math.random()*100)));
    tv.setTextSize(22);
    ((ViewPager) collection).addView(tv);
    return tv;
}

何か案は?PageViewの親のいくつかの謎の設定がどういうわけかonLayoutPageViewを無効にしているように私には見えます

4

1 に答える 1

11

私の問題を見つけました。私のビューの親の親で、誰かがサブクラス化され、を呼び出さずLinearLayoutにオーバーライドしました。requestLayout()super.requestLayout()

これにより、ビュー階層の更新が中断され、ViewPagerでonMeasureとonLayoutが呼び出されなくなりました。ページを測定してレイアウトしないと、ViewPagerでは空白として表示されていました。

これがいつか他の誰かを助けることを願っています。理解するのに私は永遠にかかった。

プロのヒント:android-sdk / tools/hierarchyviewer素晴らしいです。Androidチームに感謝します。誰もが少なくとも1回は実行する必要があります。これは、UIのデバッグと設計に非常に役立ちます。

于 2012-07-30T20:36:26.403 に答える