각 목록 항목에 클릭 가능한 이미지가 하나 이상 포함될 수있는 목록보기가 있습니다. 이미지를 클릭하면 이미지의 전체 화면 버전을 보여주는 활동이 시작됩니다.OnClickListeners가 지속적으로 실행되지 않음
다음 코드 (약간 단순화)는 각 ListItem
의 각 이미지에 대해 GetView()
구현 내에서 OnClickListeners
을 설정합니다. 이것은 완벽하게 작동했습니다.
ImageView imageView = (ImageView)convertView.findViewById(R.id.image_res);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ActivityLauncher.startPhotoViewerActivity(mContext, item);
}
});
그러나 성능을 향상시키기 위해 처음으로 구성한 후 각보기를 메모리에 저장하기로 결정했습니다. 저는 convertView
을 사용하는 대신 4-5 가지 유형의 뷰가 있기 때문에 코드를 동적으로 구성하여 재사용하기가 어렵습니다.
뷰를 메모리에 저장하고 위치를 기준으로 getView()
을 호출하는 동안 이미 생성 된 뷰를 반환하면 성능이 크게 향상되지만 OnClickListeners
은 펑키 동작을 시작합니다.
특히, 주어진 이미지를 두드리면 그것에 대한 OnClickListener
이 즉시 실행되거나 전혀 실행되지 않을 수 있습니다. 즉시 발사되지 않는 경우, 스크롤을 시작하자 마자 발사 될 수 있습니다. 이 작업으로 OnClickListener
이 실행되지 않으면 뒤로를 클릭하여 활동을 종료하면 해당 활동이 트리거 될 수 있습니다. 이것이 실행되지 않으면 BACK을 눌러 모든 활동을 닫은 다음 앱을 다시 입력하면 대기중인 모든 항목이 실행됩니다. OnClickListeners
. 한 가지 경우에 나는 결과없이 다양한 이미지에서 25 번을 클릭했습니다. 그런 다음 모든 활동을 닫은 다음 다시 한 번 응용 프로그램 아이콘을 클릭하여 25 개의 이미지 미리보기를 모두 열었습니다.
이 문제의 원인은 무엇입니까? 흥미로운 것은 OnClickListeners
이 어떤 시점에서 사진 뷰어 활동을 열어 분명히 올바르게 설정되어 있다는 것입니다. 잘못된 이미지는 결코 열리지 않으며 절대로 절대 발사하지 않습니다. 문제는 즉시 또는 나중에 발사 될 수 있다는 것입니다.
각 목록 항목의보기를 저장하고 내가 수행하는 것처럼 getView()
의 위치를 기반으로하여 반환하지 않는 것이 좋습니까? 어떤 도움이라도 대단히 감사합니다.
전체'getView()'메소드를 게시해야합니다. 그렇지 않으면이 특정 동작이 발생하는 이유를 진단하기가 매우 어려울 것입니다. – dmon