1. ホーム
  2. android

[解決済み] Androidです。ListViewから子ビューにアクセスする

2022-10-22 06:49:24

質問

を使用して表示されたリスト内の1つの要素のピクセル位置を調べる必要があります。 ListView . のいずれかを取得する必要があるようです。 TextViewの を取得し、次に getTop() の子ビューを取得する方法がわからないのですが。 ListView .

更新しました。 の子プロセスは ViewGroup はリストの項目と一対一で対応するわけではありません。 ListView . その代わりに ViewGroup の子は、今見えているビューだけに対応します。そのため getChildAt() の内部のインデックスを操作します。 ViewGroup の内部のインデックスを操作します。 ListView が使うリストの位置とは必ずしも関係がありません。

どのように解決するのですか?

参照してください。 Android ListView: 表示されているアイテムのデータインデックスを取得する で、上記のFeetさんの回答の一部と組み合わせると、以下のようなものが得られます。

int wantedPosition = 10; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - 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()) {
  Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
  return;
}
// Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead.
View wantedView = listView.getChildAt(wantedChild);

この利点は、ListViewの子に対して反復処理を行わないため、パフォーマンスが低下する可能性があることです。