0

145 アイテムのアダプターがあるとします。現在、Listview には 10 個のビューが表示されており、ビューはアイテム 104 から 113 を表しています。

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
{
  View view = getViewForPosition(??, view);//keep reading for ?? details
}

アダプターにとってアイテム 104 である firstVisibleItem のビューが必要な場合、リストからどのように要求すればよいですか? 私は言いlistview.getChildAt(0)ますか?それとも私は言いlistview.getChildAt(104)ますか?

実際には以下の方法を使用していますが、本質的な疑問が残ります。

public View getViewForPosition(int position, AbsListView listview) {
        int firstPosition = listview.getFirstVisiblePosition()
            - ((ListView) listview).getHeaderViewsCount();
        int wantedChild = position - firstPosition;
        // Say, first visible position is 8, you want position 10, wantedChild will now be 2
        // So that means your view is child #2 in the ViewGroup:
        if (wantedChild < 0 || wantedChild >= listview.getChildCount()) {
            return null;
        }
        return listview.getChildAt(wantedChild);
    }
4

2 に答える 2

0

あなたの質問に対する答えは "listview.getChildAt(0)" (要素 104 が最初に表示される要素である場合のみ) です。ListView が機能する方法は、作成された「行」または要素を再利用することです。値を入力する内部メカニズムですが、「子」に関しては、一度に表示できる要素の数だけであり、それらはすべての要素で再利用されます。したがって、300 個の要素があるが、一度に 5 個しか表示されない場合、リスト ビュー内の子要素の数は、「最後」および「最初」の要素効果を実行するために 5 + 1 または 2 であることを意味します...

ここで、(ビュー自体ではなく) ビューに入力するために使用される実際の要素が必要な場合は、リストビューからアダプターを取得し、Adapter.getItem(104) を呼び出す必要があります。これにより、要素が得られます。行に入力するために使用されます...

お役に立てれば...

よろしく!

于 2013-10-02T21:09:06.993 に答える