이 있는 단점을 구현 를 실험,세 개의 각 ListView 행는 대신 onItemClickListener?
-
14-12-2019 - |
문제
는 것이 더 편리할 것입을 위해 나에게 등록하는 독특한 OnClickListener
각 행에 대해 ListView
, 지만,나는 것을 확인하고 싶다습니다.나 현재 디자인 오히려 복잡한 방법은 별도의 문제 OnClickListener
에서 각 행에는 유형입니다.
그 이유는 내가 다수의 클래스에서 행 ListView
.각 클래스는 완전히 다른 책임과 동작입니다.예를 들어, ListView
모두 포함할 수 있는 하위 범주 및 제목.는 경우에는 책 제목을 클릭하면,새로운 활동 시작해야 하는 표지 이미지입니다.면 하위 범주 클릭하면,새로운 도서 목록 및 카테고리가 표시됩니다.
나는 다음과 같은 행 자체를 유지에 대한 지식이 자신의 정체성과 책임 하는 것 보다는 누수 지식에 대한 각각의 행에 의해 유지되의 구현 onItemClickListener
.
나도 같이 알고 무엇이 성능에 미치는 영향은 이렇게 대을 구현하는 내 자신의 논리를 알아내는 방법을 처리 를 클릭합니다.
이 있는 단점을 구현하는 onClickListener
각 ListView
ArrayAdapter
행신 onItemClickListener
?내가 찾는 콘크리트의 데이터 고 특정 단점 보다는 막연한 권장 사항입니다.
내가 기대한다 메모리 사용, 초기화 시간, 나 안정 상태 속도 (다음과 같 목록을 스크롤)현저하게 영향을 받습니까?
해결책
당신이하지 않는 이유를 설명할 필요가 별도의 클릭 청취자에 대한 각각의 행이지만,나는 추천합니다.을 살펴 사용 View.setTag(Object)
/View.getTag()
을 통과하는 행별 사용자 정의 데이터는 사용자 정의할 수 있습의 반응(공유)클릭합니다.
편집
나는 당신의 예제에서 당신은 왜 다른 원 OnClickListener
s 첨부되 당신의 행이 있습니다.었다는 인상을 받는 당신이 원하는 별도의 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)
}
}