1

LarsWerkman のQuickReturnListViewをアプリケーションに適用していますが、リストのスクロールに時間がかかりすぎます。私のアプリケーションはサムネイル付きの行を表示しますが、すべて同じサイズです。

public void computeScrollY() {
    mHeight = 0;
    mItemCount = getAdapter().getCount();   
    mItemOffsetY.clear();

    for (int i=0;i<mItemCount;++i)
    {
        View view = getAdapter().getView(i, null, this);
        view.measure(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            mItemOffsetY.add(i,  mHeight);
            mHeight += view.getMeasuredHeight();
    }
    scrollIsComputed = true;
 }

この計算を高速化するために私が考えたことの 1 つは、すべてのアイテムに対して getView を呼び出すのではなく、すべての行のサイズが同じであるためですが、すべてのアイテムに対して同じ view.getMeasuredHeight() を使用すると、QuickReturnListView の効果故障します。誰かがこの計算を改善するのを手伝ってくれますか? ありがとう

4

1 に答える 1

1

コードがこのように機能し、収益がすべて同じサイズである場合、このコードを使用して実行を高速化できます。

public void computeScrollY() {
    mHeight = 0;
    mItemCount = getAdapter().getCount();   
    mItemOffsetY.clear();

    if(mItemCount>0) {
        View view = getAdapter().getView(0, null, this);
        view.measure(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = view.getMeasuredHeight();
        for(int i=0; i<mItemCount;i++) {
            mItemOffsetY.add(i,  mHeight);
            mHeight += h;
        }
    }
    scrollIsComputed = true;
 }

ボックス mItemOffset 0 の要素は、コードでは常に 0 であることを知っておく必要がありますか?

また、このコードを使用すると、列の数を考慮せずにすべての要素 (表示されていないものも含む) の高さがわかるということを知っておく必要があります。

さらに、高さを計算するためだけに、ビューを作成するために必要なすべてのインスタンスを手動で再作成する getView を呼び出すのはあまりきれいではありません。

お役に立てれば幸いです

于 2013-05-30T18:46:52.990 に答える