2013-10-11 2 views
0

화면이 꺼져있을 때 목록 항목의보기를 가져 오는 데 문제가 있습니다. 이목록 항목의 배경을 부드럽게 스크롤 한 후 어떻게 변경합니까?

//locationsList is a listview 
locationsList.post(new Runnable() { 
    @Override 
    public void run() { 
     locationsList.smoothScrollToPosition(k); 
    } 
}); 

그럼 내가 스크롤을 끝낼 후 나는이 전화를 어떻게

View listItem = locationsList.getChildAt(k); 
listItem.setBackgroundColor(getResources().getColor(R.color.highlight)); 

을하고 싶지에

먼저 나는 부드러운 스크롤을 해요?

+1

기본적으로 다음을 원합니다. 스크롤이 완료되면 알 수 있습니까? – Lefteris

+0

getview는 해당 위치가 표시 될 때 호출되므로 getview에서 배경을 변경하려고 시도합니다. –

+0

@Lefteris 그래, getChildAt가 화면 상에 뷰가없는 경우 null을 리턴한다. – abounket

답변

0

listitem보기에 고유 한 태그를 설정하십시오. 스크롤을 변경하려면이 태그가있는 목록 항목에 액세스하십시오.

물론
locationsList.setOnScrollListener(new OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) { 
       if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){ 
        View listItem = locationsList.getChildAt(k); 
        listItem.setBackgroundColor(getResources().getColor(R.color.highlight)); 
       } 

      } 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      } 
     }); 

은 위의 스크롤하기 전에 경우에만 배경을 업데이트하는 논리를 필요로 : 당신의 스크롤이 완료했을 때 당신이 알고 싶은 모든 경우

0

, 당신은 당신의 목록보기에 onScrollListener를 추가해야 당신에 의해 시작된 것이므로, 부울 플래그를 사용하여 locationsList.smoothScrollToPosition(k); 실행에서 true로 설정해야합니다. 그러면이 플래그가 true이면 scrollListener에서 코드를 실행하고 플래그를 다시 false로 설정하십시오.

+0

확실하지 않은 이유는 무엇입니까?하지만 OnScrollListener.SCROLL_STATE_IDLE이 너무 빠르며 항목이 아직 화면에 없었습니다. – abounket

+0

처음으로 스크롤을 시작 했습니까? 즉, 실행 가능한 행을 통과 한 다음 scrollStateChanged 행사? – Lefteris

+0

음, 내 runnable가 호출 된 후 조금 스크롤되었습니다. 나는 scrollState 변경과 물건들을보기 위해 브레이크 포인트를 둔다. – abounket

관련 문제