를 사용하여 표시된 목록에서 한 요소의 픽셀 위치를 찾아야합니다 ListView
. TextView 중 하나를 얻은 다음을 사용해야 하는 것 같지만 .NET Framework의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의 자식을 반복하지 않아 성능 저하를 일으킬 수 있다는 것입니다.
답변
이 코드는 사용하기가 더 쉽습니다.
View rowView = listView.getChildAt(viewIndex);//The item number in the List View
if(rowView != null)
{
// Your code here
}
답변
ListView 클래스에 대한 문서를 빠르게 검색하면 ViewGroup에서 상속 된 getChildCount () 및 getChildAt () 메서드가 나타납니다. 이것을 사용하여 반복 할 수 있습니까? 잘 모르겠지만 시도해 볼 가치가 있습니다.
여기 에서 찾았습니다
답변
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
View v;
int count = parent.getChildCount();
v = parent.getChildAt(position);
parent.requestChildFocus(v, view);
v.setBackground(res.getDrawable(R.drawable.transparent_button));
for (int i = 0; i < count; i++) {
if (i != position) {
v = parent.getChildAt(i);
v.setBackground(res.getDrawable(R.drawable.not_clicked));
}
}
}
});
기본적으로 두 개의 드로어 블을 만듭니다. 하나는 투명하고 다른 하나는 원하는 색상입니다. 클릭 한 위치 ( int position
정의 된대로) 에서 포커스를 요청하고 해당 행의 색상을 변경합니다. 그런 다음 부모를 살펴보고 ListView
그에 따라 다른 모든 행을 변경합니다. 이것은 사용자가 listview
여러 번 클릭하는 경우를 고려 합니다. 이 작업은의 각 행에 대한 사용자 지정 레이아웃으로 수행됩니다 ListView
. (매우 간단합니다. a를 사용하여 새 레이아웃 파일을 만드십시오 TextView
.-포커스 또는 클릭 가능으로 설정하지 마십시오!).
맞춤 어댑터가 필요하지 않음-사용 ArrayAdapter
답변
int position = 0;
listview.setItemChecked(position, true);
View wantedView = adapter.getView(position, null, listview);
답변
이것은 ListView에서 요소의 위치를 알고 있다고 가정합니다.
View element = listView.getListAdapter().getView(position, null, null);
그런 다음 getLeft () 및 getTop ()을 호출하여 화면 위치의 요소를 결정할 수 있어야합니다.