문제

는 것이 더 편리할 것입을 위해 나에게 등록하는 독특한 OnClickListener 각 행에 대해 ListView, 지만,나는 것을 확인하고 싶다습니다.나 현재 디자인 오히려 복잡한 방법은 별도의 문제 OnClickListener 에서 각 행에는 유형입니다.

그 이유는 내가 다수의 클래스에서 행 ListView.각 클래스는 완전히 다른 책임과 동작입니다.예를 들어, ListView 모두 포함할 수 있는 하위 범주 및 제목.는 경우에는 책 제목을 클릭하면,새로운 활동 시작해야 하는 표지 이미지입니다.면 하위 범주 클릭하면,새로운 도서 목록 및 카테고리가 표시됩니다.

나는 다음과 같은 행 자체를 유지에 대한 지식이 자신의 정체성과 책임 하는 것 보다는 누수 지식에 대한 각각의 행에 의해 유지되의 구현 onItemClickListener.

나도 같이 알고 무엇이 성능에 미치는 영향은 이렇게 대을 구현하는 내 자신의 논리를 알아내는 방법을 처리 를 클릭합니다.

이 있는 단점을 구현하는 onClickListenerListView ArrayAdapter 행신 onItemClickListener?내가 찾는 콘크리트의 데이터특정 단점 보다는 막연한 권장 사항입니다.

내가 기대한다 메모리 사용, 초기화 시간, 나 안정 상태 속도 (다음과 같 목록을 스크롤)현저하게 영향을 받습니까?

도움이 되었습니까?

해결책

당신이하지 않는 이유를 설명할 필요가 별도의 클릭 청취자에 대한 각각의 행이지만,나는 추천합니다.을 살펴 사용 View.setTag(Object)/View.getTag() 을 통과하는 행별 사용자 정의 데이터는 사용자 정의할 수 있습의 반응(공유)클릭합니다.

편집

나는 당신의 예제에서 당신은 왜 다른 원 OnClickListeners 첨부되 당신의 행이 있습니다.었다는 인상을 받는 당신이 원하는 별도의 OnClickListener 인스턴스에 대한 각각의 행이 있습니다.(는 주된 이유는 추천에 대한니다.) 는 경우에 당신은이 두 가지 유형의 행(범주 및 제목)는 수백 행해야 합 두 종류의 응답지 않은 그들의 수백.또한 점을 이해하는 분리에 대한 문제입니다.

그럼에도 불구하고,제가 생각하는 재정의 ListActivity.onListItemClick() (또는 전화 ListView.setOnItemClickListener() 를 사용하지 않는 경우에는 ListActivity 는)청소기 및 더 적은 방해 할 가능성이 있는 작업의 목록을 볼 수 있습니다.당신이 사용할 수 있는 대리인 패턴 이를 위해 다음과 같습니다.

을 정의하는 추상 클래스 또는 인터페이스::

public interface MyClickHandler {
    public void onItemClick(ListView l, View v, int position, long id);
}

다음 중 하나를 만들의 인스턴스를 구현하는 객체가 이 인터페이스 유형 의 행 데이터(지 않나 인스턴스를 각 행에 대해).에 어댑터를 사용하여 setTag(Object) 를 초기화하는 태그는 각 행에 대해 적절한 MyClickHander 인스턴스입니다.에 ListActivity.onListItemClick() 재정의 사용은 이 논리:

protected void onListItemClick(ListView l, View v, int position, long id) {
    Object tag = v.getTag();
    if (tag instanceof MyClickHandler) {
        ((MyClickHandler) tag).onItemClick(l, v, position, id);
    } else {
        // default processing (if any)
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top