一度に表示できるより多くの要素を含むListViewがあります。今、完全に表示されているすべての要素からインデックスを取得したいと思います(->部分的にしか表示されていない要素を除く)。現時点ではgetFirstVisiblePosition()
&getLastVisiblePosition()
を使用しfor-loop
てそれらを繰り返しますが、これらの方法は私が望むほど正確ではありません。
より良い解決策はありますか?
ListView は、行をトップダウン リストに整理して保持します。このリストには、 でアクセスできますgetChildAt()
。だからあなたが望むものは非常に簡単です。最初と最後のビューを取得して、それらが完全に表示されているかどうかを確認します。
// getTop() and getBottom() are relative to the ListView,
// so if getTop() is negative, it is not fully visible
int first = 0;
if(listView.getChildAt(first).getTop() < 0)
first++;
int last = listView.getChildCount() - 1;
if(listView.getChildAt(last).getBottom() > listView.getHeight())
last--;
// Now loop through your rows
for( ; first <= last; first++) {
// Do something
View row = listView.getChildAt(first);
}
添加
今、完全に表示されているすべての要素からインデックスを取得したい
私はその文が何を意味するのか定かではありません。上記のコードが必要なインデックスでない場合は、次を使用できます。
int first = listView.getFirstVisiblePosition();
if(listView.getChildAt(0).getTop() < 0)
first++;
アダプターに相対的なインデックスを作成するには (つまりadapter.getItem(first)
.)
onScrollListner を試すと、getFirstVisiblePosition と getLastVisiblePosition を使用できるようになります。
このリンクには、同様のタイプの問題が含まれています。私はあなたがそこにあなたの答えを得たと思います..,.
私がこれを行う方法getView
は、アダプターに渡されているビューを拡張し、メソッドをListView
オーバーライドして、表示されているインデックスを追跡することです。onAttachedToWindow
onDetachedToWindow