2010-06-30 4 views
0

나는 상황 별 메뉴가 있거나없는 ListView를 가지고있다. 나는 각각 registerForContextMenuunregisterForContextMenu을 사용하고 있으며 등록 자체 나 위로/작업 중 나타나는 상황에 맞는 메뉴에는 아무런 문제가 없습니다.unregisterForContextMenu가 뷰를 완전히 등록 해제 할 수 있습니까?

컨텍스트 메뉴에 대한보기가 등록되면 사용자가이를 클릭하면 배경이 주황색에서 노란색으로, 그 다음 흰색으로 점진적으로 변경됩니다. 컨텍스트 메뉴에 대한 뷰가 등록되지 않은 경우 (같은 색으로 유지됨)에는 발생하지 않습니다. 그러나 unregisterForContextMenu을 사용하여 문제의보기를 등록 취소하면이 효과는 여전히 유효하며 사용자를 혼동시킬 수 있습니다. 효과 때문에 상황에 맞는 메뉴가 필요할 것입니다. 이것은 unregisterForContextMenuregisterForContextMenu의 효과를 완전히 뒤집지 않는다는 것을 나타냅니다.

내 질문은입니다 : 상황에 맞는 메뉴를 얻고에서보기 등록 취소 완전히하는 방법은 무엇입니까?

누군가가 내부적으로 (un)registerForContextMenu의 작동 방식에 대해 명확한 생각을 갖고 있다면 생각해주십시오.

편집 : '화이트닝'효과가 구현되지 않았으므로 HTC의 감각 인터페이스에는 적용되지 않습니다. 따라서 질문은 기본 Android 인터페이스에만 적용됩니다.

+0

호기심에서 벗어나서 왜 컨텍스트 메뉴를 등록하고 등록을 취소합니까? 컨텍스트 메뉴를 사용하지 않는 활동 인 경우 등록하지 마십시오. – CommonsWare

+0

카테고리, 하위 카테고리 (둘 이상의 레벨) 및 기사가 있다고 가정합니다. 모든 기사는 상황에 맞는 메뉴를 지원하며 모든 범주 (및 하위 범주)는 그렇지 않습니다. 제 의뢰인이 제게 이것을 통일 된 방식으로 보여주기를 바랍니다. 따라서 범주를 표시하고 범주를 클릭하면 ListView의 내용 만 변경됩니다. 그리고 이것은 내가 상황에 맞는 메뉴를 구독 취소하고자하는 순간입니다. – Shade

답변

7

매우 간단합니다. registerForContextMenu (View v)은 단순히 v.setOnCreateContextMenuListener (this)을 호출하며 호출하는 활동은 OnCreateContextMenuListener입니다. 문제는 View 클래스에서 setOnCreateContextMenuListener이보기가 길게 클릭 가능한지 확인하고 그렇지 않은 경우보기로 설정합니다. 그러나 방법 unregisterForContextMenu (View v)v.setOnCreateContextMenuListener (null)으로 만 호출됩니다. 그러나 setOnCreateContextMenuListener은 전달 된 OnCreateContextMenuListener이 null인지 아닌지를 확인하지 않기 때문에 문제의 뷰를 항상 클릭 가능한 상태로 둡니다.

해결 방법은 v.setLongClickable (false)입니다.

관련 문제