문제

다음을 사용하여 표시된 목록에서 한 요소의 픽셀 위치를 찾아야 합니다. ListView.둘 중 하나는 받아야 할 것 같습니다 TextView의 그런 다음 사용 getTop(), 하지만 어린이의 관점에서 볼 수 있는 방법을 알 수 없습니다. ListView.

업데이트: 의 아이들 ViewGroup 목록에 있는 항목과 1:1로 일치하지 않습니다. 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 클래스에 대한 문서를 빠르게 검색하면 getChildCount () 및 getChildat () 메소드가 ViewGroup에서 상속되었습니다. 이것들을 사용하여 그들을 통해 반복 할 수 있습니까? 확실하지 않지만 시도해 볼 가치가 있습니다.

그것을 발견 여기

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. (매우 간단하게, 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()을 호출하여 화면 위치의 요소를 결정할 수 있어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top