0

안드로이드 목록 어댑터의 getView 메서드에 대한 작업을 덜 만들고 싶습니다. ViewGroup이 getView 메소드 대신 뷰를 업데이트하도록함으로써 스크롤 속도를 빠르게 할 수 있다는 것을 읽었습니다. 내가 여기에이 개념을 이해하고 도움을 필요로하는 것은 내가 지금까지 무엇을 가지고 :안드로이드 어댑터 getView 더 나은 decoupling with viewGroup

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    MyViewGroup myViewGroup; 
    if (convertView == null) { 
     myViewGroup = (MyViewGroup) LayoutInflater.from(context) 
      .inflate(R.layout.banana_phone, parent, false); 
    } else { 
     myViewGroup = (MyViewGroup) convertView; 
    } 

    InfoObject info = getItem(position); 

    myViewGroup.update(info); //how does this part work ? this is synchrounous so getView has to wait, doesn't it ? 

    return myViewGroup; 
} 

나는이 site

에서이 아이디어를 가지고 그래서 내 문제는 내가의 getView 대기를시키는없이 뷰 그룹 업데이트를해야합니까 방법이다. 나는 위의 구현에서 viewgroup이 업데이트 될 때까지 기다릴 것이라고 믿는다. 그래서 이것은 listview를 여전히 느리게 만들 것입니다. 나는 커스텀 뷰 그룹이 어떻게 보이는지에 대한 예제를 원한다.

ViewGroup을 확장하고 사용자 정의보기 그룹을 구조화하는 방법을 이해하지 못하는 것처럼 ListView를 확장 한 후에 MyViewGroup이 어떻게 생겼는지 예를 들어 줄 수 있습니까?

+0

* getView를 대기시키지 않고 viewGroup 업데이트 * ... 복잡합니다 ... * 올바른? * 올바른 ...이 코드가 뷰를 재사용한다는 것을 기억합니다. * .update *를 " 지연된 "어떻게 든 데이터가 오래되었다는 문제에 직면 할 수 있습니다 (myViewGroup이 다른 InfoObject에서 업데이트되어야 함). 구현 가능한 좋은 예제는 이미지 로더의 코드 안에 숨겨져 있습니다 ... – Selvin

+2

그는 마치 모든 일반적으로 "getView()"에있는 ViewGroup으로 업데이트합니다. 그것은 속도를 높이거나 ListView를 느리게하지 않습니다. 한 클래스에서 다른 클래스로 작업을 옮기는 것입니다. – DeeV

+2

기본적으로 어댑터는 MyViewGroup에 대해서만 알고 있어야합니다. 뷰 요소가 MyViewGroup 안에 있는지 알 필요가 없으므로 변경하기가 더 쉽습니다. – DeeV

답변

0

정확합니다. update 호출은 동기식이어야하며 getView은 대기해야합니다.

ViewGroup을 목록으로 작성하면 성능이 향상되지만보기의 값 설정이 어댑터에 대한 별도의 클래스로 이동합니다. decoupling. 그런 다음이보기를 다른 레이아웃 (예 : 상세보기의 머리말)에서 사용한 경우 update 메소드를 사용하여 코드 중복을 줄일 수 있습니다.

+1

나는 지금 그것을 얻는다라고 생각한다. 이 방식으로 동일한 유형의 요소를 가지고 있다면 뷰 그룹을 다른 목록에서 재사용 할 수 있습니다. 이것은 훌륭합니다. DeeV는 올바른 아이디어를 +1했습니다. – j2emanue