클릭할 때 수신기 제거
텍스트를 순환하고 상태 메시지를 표시하는 개체가 있습니다.메시지가 변경되면 메시지와 관련된 활동으로 이동하기 위해 변경할 개체의 클릭 이벤트를 원합니다.
그래서 저는.TextView mTitleView이벤트를 이렇게 배정합니다.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
클릭 이벤트를 제거하려면 어떻게 해야 합니까?실행 가능한 영역이 없는 상태 메시지가 있어서 클릭 이벤트를 끄고 싶습니다.클릭 이벤트를 순환해서 적절히 처리할 수 있으면 좋겠는데, 최선의 방법을 모르겠어요.
mTitleView.setOnClickListener(null)속임수를 써야 합니다.
OnClickListener에서 상태를 확인한 다음 클릭이 수신기 추가 및 지우기를 수행해야 하는지 여부를 결정하는 것이 더 나은 설계일 수 있습니다.
보기를 클릭할 수 없는 경우(예: 텍스트 보기), 설정setOnClickListener(null)클릭 가능한 뷰를 의미합니다. 사용합니다.mMyView.setClickable(false)보기를 클릭할 수 있도록 하려면 선택해야 합니다.예를 들어, 배경에 여러 상태별로 다른 색을 표시하는 xml 그리기 가능을 사용할 경우, 보기가 여전히 클릭 가능한 경우, 사용자는 이를 클릭하면 다른 배경 색이 표시되므로 이상하게 보일 수 있습니다.
아마도setOnClickListener(null)?
세팅setOnClickListener(null)실행 시 클릭 수신기를 제거하는 것이 좋습니다.
그리고 누군가가 전화를 걸었다고 했습니다.View.hasOnClickListeners()이것이 돌아온 뒤에true, 아니, 친구.
다음은 다음과 같습니다.hasOnClickListeners()에서 따온android.view.View학급
public boolean hasOnClickListeners() {
ListenerInfo li = mListenerInfo;
return (li != null && li.mOnClickListener != null);
}
하나님 감사 합니다.확인합니다.null.
그래서 모든 것이 안전합니다.즐겨보세요 :-)
다음 확장 기능을 추가할 수 있습니다.
fun View.removeClickListener() {
setOnClickListener(null)
isClickable = false
}
전화를 건 사람들은 다음과 같은 일을 합니다.
val textView = findViewById(R.id.activity_text)
textView.removeClickListener()
위의 답변들은 변덕스럽고 신뢰할 수 없는 것 같습니다.간단한 상대 레이아웃에서 ImageView로 이 작업을 시도했지만 onClick 이벤트는 비활성화되지 않았습니다.
저에게 효과가 있었던 것은 setEnabled를 사용하는 것이었습니다.
ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);
그런 다음 View가 다음 기능으로 활성화되어 있는지 확인할 수 있습니다.
boolean ImageView.isEnabled();
다른 옵션은 setContentDescription(String 문자열) 및 StringgetContentDescription()을 사용하여 보기의 상태를 확인하는 것입니다.
그냥 말해봐요, 저한테는 효과가 있었어요.
itemView.setOnClickListener(null);
/**
* Remove an onclick listener
*
* @param view
* @author malin.myemail@gmail.com
* @website https://github.com/androidmalin
* @data 2016-05-16
*/
public static void unBingListener(View view) {
if (view != null) {
try {
if (view.hasOnClickListeners()) {
view.setOnClickListener(null);
}
if (view.getOnFocusChangeListener() != null) {
view.setOnFocusChangeListener(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
ViewGroup viewGroup = (ViewGroup) view;
int viewGroupChildCount = viewGroup.getChildCount();
for (int i = 0; i < viewGroupChildCount; i++) {
unBingListener(viewGroup.getChildAt(i));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
코틀린 사용하기
view.setOnClickListener { null }
view.isClickable = false
아래와 같이 아이템을 초기화하는 것만으로도 효과가 있습니다.클릭 시, 롱클릭 시, 아이템 클릭 시, 아이템을 기준으로 롱클릭 시 제거됩니다.
mTitleView = findViewById(R.id .m제목 보기);
언급URL : https://stackoverflow.com/questions/5195321/remove-an-onclick-listener
'programing' 카테고리의 다른 글
| WooCommerce는 가격이 아닌 날짜로만 주문하는 것 같습니다. (0) | 2023.10.14 |
|---|---|
| MySQL Server가 사라졌습니다(MariaDB - MEMORY Engine) (0) | 2023.10.14 |
| 경고: session_start(): 세션 쿠키를 보낼 수 없음 - 헤더는 이미 에 의해 전송되었습니다(출력 시작 시간: (0) | 2023.10.14 |
| Word press 연락처 양식 7 사용자에게 확인 메시지 보내기 (0) | 2023.10.14 |
| redis 데이터베이스를 한 서버에서 다른 서버로 이동하려면 어떻게 해야 합니까? (0) | 2023.10.14 |